DML 명령어 중 UPDATE 명령어를 생각해 봅시다. employees 테이블에서 Steven King 직원의 email 정보를 SKING에서 S_King으로 수정하려 합니다. UPDATE 명령어를 이용해서 데이터를 변경할 명령어를 실행하면 트랜잭션이 시작됩니다(➊). UPDATE 명령어를 사용했기 때문에 데이터가 S_King으로 변경됩니다. 다만 현재 상태는 데이터베이스에 영구적으로 반영된 상태가 아니므로 다른 사용자가 해당 email 데이터를 조회했을 때는 기존 데이터인 SKING으로 출력됩니다(➋). 데이터가 문제없이 정확하게 갱신되었다면 커밋을 하고(➌), 데이터는 정상적으로 데이터베이스에 영구적으로 반영됩니다. 다만 ➋ 과정에서 제약 조건 위반 등 어떤 사유에 의해 UPDATE 명령어 실행이 실패되면(➍) 트랜잭션은 롤백되어 철회됩니다(➎).
트랜잭션을 확정하는 SQL 개념인 커밋과 롤백에 대해 다시 한 번 살펴보겠습니다. 커밋과 롤백은 트랜잭션 제어어(TCL, Transaction Control Language)라고도 하는데, 커밋은 우리가 워드프로세서에서 문서 작업을 마무리한 다음 파일로 저장하기 위해 ‘저장’ 버튼을 누르는 것과 유사하고, 롤백은 문장이 틀렸을 때 되돌리기를 해서 방금 전 상태로 되돌아가는 것과 유사합니다. 차이점은 데이터베이스에서 커밋은 데이터베이스에 영구적으로 반영되기 때문에 커밋 이전으로 되돌리기가 쉽지 않다는 점입니다.
표 9-4 커밋과 롤백
개념 |
설명 |
커밋(commit) |
트랜잭션의 모든 미결정 데이터를 영구적으로 반영함으로써 트랜잭션을 종료한다(저장과 유사). |
롤백(rollback) |
트랜잭션의 모든 미결정 데이터 변경을 포기함으로써 트랜잭션을 종료한다(되돌리기와 유사). |