TCL (TRANSACTION CONTROL LANGUAGE)
트랜잭션 관련 문장으로 DML(데이터 조작어)에 의해 변경된 내용을 관리한다
데이터의 일관성을 유지하면서 안정적으로 데이터를 복구할 때 사용하는 쿼리문이기도 하다
Transaction
- 데이터베이스의 논리적인 작업단위로 데이터 처리의 한 단위이다
- 하나의 트랜잭션은 All-Or-Nothing 방식으로 처리한다
=> 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구시키기 위함임 - 데이터의 변경사항(DML)들을 하나의 트랜잭션으로 묶어서 처리한다
=> COMMIT(확정,승인)하기 전까지의 변경사항들을 모두 묶어서 하나의 트랜잭션으로 담아둔다 - 트랜잭션의 대상이 되는 SQL : INSERT, UPDATE, DELETE (DML)
- 트랜잭션 제어 명령어 종류
- COMMIT : 변경사항을 DB에 반영
- ROLLBACK : 변경사항을 반영하지 않고 되돌림
- SAVEPOINT : 현재시점 임시저장
- ROLLBACK TO 포인트명 : SAVE포인트로 저장해둔 시점으로 롤백
[ COMMIT ]
COMMIT;
- 하나의 트랜잭션에 담겨있는 변경사항들을 실제 DB에 반영하겠다는 것을 의미한다
- 저장되지 않은 모든 데이터를 데이터베이스에 저장하고 현재의 트랜잭션을 종료하라는 명령어이다
- 실제 DB에 변경사항들을 반영시킨 후 트랜잭션은 비워진다
=> 변경사항들이 확정되었기 때문
=> 하나의 트랜잭션 과정이 끝났다고 할 수 있다 - DDL(CREATE, DROP, ALTER, RENAME, TRUNCATE)은
AutoCommit
으로 별도의COMMIT;
명령어 없이 즉각적으로 변경사항이 반영된다
=> 이때 기존에 있던 트랜잭션에 있던 모든 변경사항들을 무조건 실제 DB에 반영(COMMIT) 후 DDL이 수행된다
=> 따라서 DDL 수행 전 변경사항이 있었다면 정확히 확인 후 DDL을 실행해야 함 - 정상적인 종료시에도 COMMIT작업을 수행하게 된다
=> ex) exit 종료
[ ROLLBACK ]
ROLLBACK;
- 하나의 트랜잭션에 담겨있는 변경사항들을 실제 DB에 반영하지 않겠다는 것을 의미한다
- 저장되지 않은 모든 데이터 변경사항(DML)을 취소하고 현재의 트랜잭션을 끝내게 된다
- 트랜잭션에 담겨있던 변경사항 모두를 다 삭제(무효화)한 후 마지막 COMMIT시점으로 돌아가게 된다
- 비정상적인 종료 시 ROLLBACK 작업을 수행하게 된다
=> ex) 우측상단 X버튼 클릭 시 등
[ SAVEPOINT , ROLLBACK TO ]
SAVEPOINT 저장점 명;
ROLLBACK TO 저장점 명;
-- 예시
SAVEPOINT SP1;
ROLLBACK TO SP1;
- SAVEPOINT로 현재 시점을 임시 저장하여 ROLLBACK TO로 해당 시점까지 변경사항들을 되돌린다
=> 전체 변경사항을 삭제하는 것이 아니라 SAVEPOINT로 저장해둔 시점까지만 삭제하게 된다 - 다만 이미 작업취소한 내용을 다시 작업취소할 수는 없으므로 한번 ROLLBACK TO로 ROLLBACK을 진행한 SAVEPOINT를 다시 ROLLBACK TO 할 수는 없다
댓글남기기