트랜잭션(Transaction) 종료 시점
"트랜잭션은 언제 종료되는가"에 대해 알아보자.
먼저 트랜잭션의 종료 시점을 알아보기에 앞서 시작 시점을 먼저 알아보자!
트랜잭션이 자동으로 시작되는 시점은 아래와 같다.
- DML(INSERT, UPDATE, DELETE) 문장이 실행되는 경우
- DDL(CREATE, ALTER, DROP) 문장이 실행되는 경우
- DCL(GRANT, REVOKE) 문장이 실행되는 경우
트랜잭션은 아래와 같은 상황에 자동으로 종료 된다.
- COMMIT, ROLLBACK 문을 실행한 경우
- DDL 또는 DCL 문 실행
- 기계 장애 또는 시스템 충돌(crash)
- deadlock 발생
- 강제 종료
DDL(Create, Alter, Drop, Truncate) 또는 DCL(Grant, Revoke)문이 실행될 때는 암시적으로 Auto Commit을 진행한다.
DBMS를 강제로 종료하거나 트랜잭션이 성공할 수 없게 되는 시스템 장애나 하나 이상의 오류가 발생하면 Auto Rollback이 실행되어서 트랜잭션이 종료된다.
TCL(COMMIT, ROLLBACK, SAVEPOINT)
Commit이 발생하면 데이터에 일어나는 일이다.
- 데이터베이스(실제 디스크)에 데이터를 영구적으로 변경
- 데이터의 이전 상태는 완전히 상실
- 변경된 레코드의 LOCK이 해제되고 다른 사용자가 변경할 수 있다.
- 모든 Savepoint가 제거 된다.
Rallback이 발생하면 데이터에 일어나는 일이다.
- 트랜잭션이 수행한 결과를 원래의 상태로 복구
- 변경된 레코드의 LOCK이 해제되고 다른 사용자가 변경할 수 있다.
- ROLLBACK TO point1; 명령어를 통해 특정 Savepoint까지 롤백이 가능하다.
SavePoint가 발생하면 데이터에 일어나는 일이다.
- 현재 트랜잭션 내에 저장점을 만든다.
- Commit이 실행되어야 저장점이 반영된다.
Reference
'Database > SQL' 카테고리의 다른 글
SQL - Using Temporary, Using Filesort 정리 (+ 임시 테이블, 파일 정렬) (0) | 2022.05.11 |
---|---|
SQL - SELECT 쿼리 실행 순서 정리! (4) | 2022.05.11 |
Database - 교착상태 문제를 해결하는 방법! (0) | 2022.04.20 |
MySQL - WHERE 절에서의 인덱스 사용 (+인덱스를 사용하지 않는 쿼리) (0) | 2022.03.20 |
MySQL - 쿼리 성능(실행 시간, CPU 사용량 등) 확인하는 방법 [Profiling] (0) | 2022.03.20 |