강의 링크 : https://www.youtube.com/watch?v=DdoLuLnRbwc&list=PLg_wJlcMiuKtGdlIaAZ0rOPPQuTDENnEQ&index=9
TCL (Transaction Control Language)
트랜잭션
- 데이터베이스의 논리적 연산 단위
- 의미적으로 분할할 수 없는 최소의 단위
- 일반적으로 하나의 트랜잭션은 여러 SQL 문장을 포함함
- 성공시 모든 연산을 반영, 취소시 모든 연산을 취소 → All or Nothing
- 트랜잭션의 예
- 도서 주문
- 재고 수량 감소, 주문 내역 생성, 결제, 포인트 적립
- 계좌 이체
- 원 계좌의 잔액 감소, 다른 계좌의 잔액 증가
- 교통카드 충전
트랜잭션 관리 프로그램이 지켜야 할 4가지 특성(ACID)
- 트랜잭션의 4가지 특성 : ACID
- 원자성
- 트랜잭션은 쪼개지면 안 됨 (모두 성공 or 다 실행 되지 않아야 함)
- 일관성
- 고립성
- 지속성
- COMMIT 실행 전 상태에서는..
UPDATE PLAYER SET HEIGHT = HEIGHT + 10;
- 변경된 내용은 메모리에 임시로 저장됨
- 현재 사용자는 증가한 HEIGHT 값을 읽을 수 있음
- 다른 사용자는 증가 전 HEIGHT 값만 읽을 수 있음
- HEIGHT에는 잠금(Locking)이 설정되어 다른 사용자는 값을 변경할 수 없음
- COMMIT 실행 후,
COMMIT;
- 변경된 내용은 DB에 저장됨
- 변경 내용을 모든 다른 사용자가 볼 수 있음
- 이전 데이터는 모두 사라짐 (별도 로그 보관시 복구 가능)
- 관련된 행에 대한 잠금이 해제되어 다른 사용자가 변경할 수 있음
TCL
- 트랜잭션을 제어하기 위한 명령어
- COMMIT : 변경된 내용을 DB에 영구적으로 반영
- ROLLBACK :
- 기본 - 변경된 내용을 버리고 변경 전 상태(마지막 COMMIT)로 복귀 (잘 했어도 버리기)
- SAVEPOINT를 지정한 경우, 지정한 저장점까지마나 복귀
- SAVEPOINT = 부분 복귀를 위해 지정한 저장점
- COMMIT의 반대가 ROLLBACK이고, ROLLBACK을 위해 필요한 게 SAVEPOINT
- 트랜잭션은 SQL문 실행시 자동 시작, COMMIT/ROLLBACK 실행시 종료
- 자동 커밋 / 자동 롤백
- DDL 문장 수행시 DDL 수행 전에 자동으로 커밋 (auto commit)
- DB를 정상적으로 접속 종료하면 자동 커밋
- 애플리케이션의 이상 종료로 DB와의 접속이 단절되었을 때 자동 롤백
ROLLBACK
SAVEPOINT
- 미리 지정한 SAVEPOINT까지만 ROLLBACK
- 특정 저장점까지 롤백하면 그 이후의 명령과 저장점은 모두 무효가 됨
- 일부 tool에서는 지원되지 않음
- 동일 이름으로 여러 저장점 정의시 나중에 정의한 저장점이 유효
DCL (Data Control Language)
DCL
- 사용자의 계정 생성/삭제, 권한 부여/회수에 대한 명령어