1. TCL
- 데이터베이스에서 트랜잭션의 실행 흐름을 제어하는 SQL 명령어
2. 명령어
| 명령어 | 설명 | 특징 |
| START TRANSACTION | 트랜잭션 시작 | |
| COMMIT | 변경 사항을 확정 | 트랜잭션 종료 (Rollback 불가) |
| ROLLBACK | 변경 사항 취소 | - 트랜잭션에서 수행한 내용 모두 취소됨 - 트랜잭션이 비정상 종료되면 자동 롤백됨 |
| SAVEPOINT | 트랜잭션 내 특정 지점 지정 | 이 지점을 기준으로 부분 롤백이 가능함 |
| ROLLBACK TO SAVEPOINT | 지정된 지점으로 되돌림 | 트랜잭션 실행 중 오류로 인해 재실행 시, 전체 롤백이 아닌 부분롤백으로 계산량을 줄일 수 있음 |
예시
더보기
START TRANSACTION;
INSERT INTO tc_test VALUES('a');
INSERT INTO tc_test VALUES('b');
INSERT INTO tc_test VALUES('c');
SELECT * FROM tc_test;
-- 결과 : a, b, c
SAVEPOINT f1;
INSERT INTO tc_test VALUES('d');
INSERT INTO tc_test VALUES('e');
INSERT INTO tc_test VALUES('f');
SELECT * FROM tc_test;
-- 결과 : a, b, c, d, e, f
ROLLBACK TO f1;
SELECT * FROM tc_test;
-- 결과 : a, b, c
COMMIT;
3. 트랜잭션 오류
상황별 동작
| 상황 | 트랜잭션 상태 | 롤백 범위 | SAVEPOINT 사용 여부 |
| SQL 실행 중 일반 오류 | 트랜잭션 유지 | 해당 SQL만 실패 | ✅ (선택적으로) |
| 사용자가 ROLLBACK 실행 | 트랜잭션 종료 | 전체 롤백 | ❌ |
| 사용자가 ROLLBACK TO SAVEPOINT 실행 | 트랜잭션 유지 | 지정 지점 이후만 롤백 | ✅ |
| DB 연결 종료 / 서버 crash | 트랜잭션 종료 | 전체 자동 롤백 | ❌ |
출처
'Database > Mysql' 카테고리의 다른 글
| [MySQL][SQL] 7. DCL (0) | 2026.03.08 |
|---|---|
| [MySQL][SQL] 5. Set Operation (0) | 2026.03.07 |
| [MySQL][SQL] 4. Subquery (0) | 2026.03.05 |
| [MySQL][SQL] 3-2. Inner Function: Multi Row (0) | 2026.03.05 |
| [MySQL][SQL] 6. Join (0) | 2026.03.04 |