Database/RDBMS Modeling
[MySQL] Transaction
wintertreey
2025. 9. 8. 17:21
TRANSACTION
주요 트랜잭션 명령어
| 명령어 | 설명 |
| BEGIN TRANSACTION / START TRANSACTION | 트랜잭션 시작 |
| COMMIT | 트랜잭션 확정 → 변경 사항을 DB에 반영 |
| ROLLBACK | 트랜잭션 취소 → 변경 사항 모두 되돌림 |
| SAVEPOINT 이름 | 트랜잭션 중간 저장 지점 설정 |
| ROLLBACK TO SAVEPOINT 이름 | 지정한 SAVEPOINT까지 롤백 |
| SET TRANSACTION | 트랜잭션 격리 수준 지정 (READ COMMITTED, SERIALIZABLE 등) |
예시
START TRANSACTION; -- 트랜잭션 시작
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
-- 문제가 없으면
COMMIT;
-- 문제가 생기면
ROLLBACK;
SAVEPOINT 사용예시
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
SAVEPOINT sp1; --SAVEPOINT 지점 지정
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
-- 두 번째 쿼리 문제 발생
ROLLBACK TO sp1; -- sp1까지만 롤백
COMMIT;
보통 TRANSACTION을 SERVICE 에서 어노테이션을 걸어 프로그램 상에서 처리하는게 일반적이다.
그러나 데이터베이스에서 직접 작업을 해야할땐 한번 쿼리를 날린 후 백업이 안되기 때문에 꼭 TRANSACTION 처리를 해야한다.