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] 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 |
[MySQL] INSERT (0) | 2025.08.26 |