[Database] 2. Transaction & Join

Nam_JU·2022년 7월 23일
0

KaKao Cloud School

목록 보기
13/19

Database

SQL 구문

  • DML : Data Management Language 데이터 조작 언어
    • Insert
    • update
    • select
    • delete
  • DDL: Data Definition Language
    • create
    • drop
    • alter
  • DCL: Data Control Language
    • grant: 권한을 부여해줄 수 있다
    • deny: 특정 사용자가 특정 객체를 사용하지 못하도록 하는 것

DML VS DDL 차이

트렌잭션의 유무이다

  • DML : 트렌잭션에 영향을 받는다
  • DDL : 트렌잭션에 영향을 받지 않는다


Transaction 트랜잭션

  • 일(작업)의 최소단위
  • 내가 임의로 설정할 수 있다
  • 여러개의 SQL문을 엮어서 하나의 논리적인 트랜잭션이라는 단위로 설정할 수 있다

트랜잭션을 사용하는 이유

  • 트랜잭션이 기본적으로 제공해주는 ACID 특성이 부여된다
    • 해당 단위작업에 (SQL 코드에) ACID라는 특성이 DBMS에 의해 부여된다
    • 즉, DBMS에게 도움을 받을 수 있다

계좌이체 작업

  1. select : A계좌에 돈이 있는지 확인
  2. update : A쪽 현재 잔고에서 금액을 뺀다
  3. select: B쪽 계좌에 돈 확인
  4. update: B쪽 계좌잔고에서 금액을 추가한다
  • 트랜잭션은 여러 SQL 구문을 묶어서 하나의 논리적인 작업 단위로 바꿀 수 있다
  • 그런데 작업을 하다가 멈추게되버리면 중간에 돈이 날라갈 수있다
  • 트랜잭션은 아무것도 아닌 상태가되거나 혹은 전부 완료하거나 두가지 형태로만 존재할 수 있도록 한다. 이것을 도와주는게 Rollback 이다 (3번에서 멈추면 1,2 실행 없애고 처음으로 돌아감)

ACID

  • Atomicity(원자성)
    • All or Nothing : 작업을 전부 수행하거나 아무것도 안하거나
  • Consistency(일관성)
    • 제약조건에 위배되는 데이터들이 들어오는것을 막는다
    • 트랜젝션이 끝난후 결과가 충족 해야만 한다
      • 트랜잭션 중간에는 제약조건이 위배되어도 괜찮다
      • ex) 결과적으로 잔액은 항상 0이상이어야 한다
  • Isolation (독립성, 격리성)
    • 트랜잭션이 진행되고있는 데이터는 다른 트랜젝션이 사용하지 못한다
    • 트랜잭션을 사용하면 해당 리소스에 대한 동기화를 DBMS가 처리한다
    • 트랜잭션 단위로 독립적으로 사용해 주는것을 보장해준다
  • Durablility (영속성, 지속성)
    • 트랜잭션이 정상적으로 끝나면 해당 결과가 2차 저장소에 영구적으로 저장되는 것을 보장해준다

트랜젝션 설정

  • Commit : 트랜젝션이 종료되었습니다 (정상 반영)
  • Rollback : 처음으로 되돌려주세요
-- 그다음부터 실행되는 모든 구문은 트랜젝션에 묶인다
START transaction;

DELETE
FROM buytbl;

COMMIT; -- 지금까지 진행한 작업을 실제 데이터베이스에 적용해달라 (아직까지는 적용되지 않았다!)

ROLLBACK; -- 다시 무효화

SQL 워크밴치

원래 커밋을 하지 않으면 반영이 되지 않는다 그렇다면 여태 어떻게 작업을 했던것일까?

(값이 바로 나왔음) 워크밴치에는 쿼리 하나하나 실행할때마다 COMMIT이 되도록 AUTO COMMIT이 되어있다 따라서 SQL 문장 하나하나가 트랜젝션이었다

  • GROUP BY
  • DISTINCT
INSERT INTO TESTTBL VALUES(1,"홍길동",25);

-- 필요한 것만 선택해서 데이터 입력
INSERT INTO TESTTBL(ID, USERNAME) VALUES(2 ,'이순신');
-- 순서를 맞출 필요 없다
INSERT INTO TESTTBL(USERNAME, id) VALUES('김경진',3);

MySQL Data Type

  • 숫자
    • 정수
      • INT : 4byte → -21억 ~ +21억
      • BIGINT : 8byte → -900경 ~ +900경
    • 실수
      • 진짜 실수가 아니라 근사값으로 저장을 한다
      • FLOAT : 4byte
      • Double : 8byte
      • 명확한 실수 값을 저장하고 싶을때는 DESCIMAL 이다
  • 문자
    • CHAR
      • 고정형 길이이다 (1~255)
      • 연산이 빠르다
    • VARCAR
      • 가변 길이이다(1~66535) → 컬럼을 잡을때 몇자리가 와야하는지 모를때 사용
      • 사용한 만큼만 사이즈가잡힌다
    • LONGTEXT(CLOB)
      • 긴 문자열을 저장 할 수 있는 컬럼이다
      • 4G정도의 데이터를 저장 할 수 있는 데이터 길이 (대본, 책 등)
    • LONGBLOB(BLOB) : 동영상 저장을 할 때


Join

  • SQL은 표준 방식이다 (오라클은 다름)
  • Inner Join
  • Outer Join
  • Self Join
  • Cross Join : 일반적으로 더미데이터를 생성할때 사용한다
-- 구매 테이블에서 'JYP'라는 아이디를 가진 사람이 구매한 물건을 발송하기 위해서
-- 이름과 주소가 필요하다 이 정보는 usertbl에 존재한다
-- 두 테이블을 결합해서 결과를 알아내자

select  *
from buytbl
	inner join usertbl
    on usertbl.userID = buytbl.userID -- 결합조건 on
where buytbl.userID = 'JYP';

profile
개발기록

0개의 댓글