wintertreey 님의 블로그
[MySQL] Transaction 본문
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 처리를 해야한다.
'SQL과 DB' 카테고리의 다른 글
| [MySQL] LEFT JOIN, INNER JOIN (0) | 2025.09.15 | 
|---|---|
| [MySQL] Rename, JOIN (0) | 2025.09.04 | 
| [MyBatis]1:N 객체 매핑 : <resultMap> <collection>, flatMap이란 (0) | 2025.09.04 | 
| [MySQL] UPDATE (0) | 2025.08.29 | 
| [MySQL] SELECT (2) | 2025.08.26 | 
