MySQL에서 트랜잭션을 사용하면, 여러 개의 데이터 변경 작업을 하나의 논리적 작업 단위로 묶어 처리할 수 있다.
이때 문제가 생겼을 경우, 전체 변경 사항을 한 번에 되돌릴 수 있는 강력한 명령어가 바로 ROLLBACK이다.

🔍 ROLLBACK 명령어란?
ROLLBACK은 현재 트랜잭션에서 이루어진 모든 변경 사항을 취소하는 명령어이다.
트랜잭션이 시작된 이후 COMMIT 이전까지의 모든 작업을 되돌리는 역할을 한다.
ROLLBACK;
이 명령어는 실무에서 데이터 손실, 입력 오류, 예외 발생 등 다양한 상황에 대처하기 위해 매우 자주 사용된다.
MySQL에서 데이터 복구의 마지막 보루라 할 수 있다.
✅ ROLLBACK이 필요한 상황
- 사용자의 잘못된 입력으로 인해 데이터가 잘못 저장되었을 때
- 프로그래밍 로직 중 예외(Exception)가 발생했을 때
- 비즈니스 조건(예: 재고 부족 등)을 만족하지 못할 때
- 중간 작업 중 실패가 발생하여 전체 작업을 무효화해야 할 때
이런 상황에서 ROLLBACK은 데이터의 정합성을 유지하기 위한 가장 안전한 해결책이다.
🚨 autocommit 설정과의 관계
MySQL은 기본적으로 autocommit = 1 상태이다.
이 경우에는 트랜잭션이 자동으로 커밋되기 때문에 ROLLBACK이 아무 효과도 발휘하지 못한다.
따라서 반드시 트랜잭션을 수동으로 관리하는 방식으로 전환해야 한다.
SET autocommit = 0;
START TRANSACTION;
-- 데이터 변경 작업
ROLLBACK;
이렇게 해야만 ROLLBACK을 실행했을 때 변경 사항을 안전하게 취소할 수 있다.
🧪 실전 예제 1 – 잘못된 데이터 입력 취소
SET autocommit = 0;
START TRANSACTION;
INSERT INTO orders (order_id, user_id, total_price) VALUES (1002, 3, 85000);
UPDATE users SET point = point + 850 WHERE user_id = 3;
-- 문제 발생
ROLLBACK;
위 예제에서는 포인트 적립 과정 중 오류가 발생했다고 가정하고, 전체 작업을 ROLLBACK으로 취소한다.
이 방식은 실무에서 데이터 일관성 유지에 매우 중요하게 사용된다.
🧪 실전 예제 2 – 유효성 검사 후 롤백
START TRANSACTION;
UPDATE inventory SET stock = stock - 10 WHERE product_id = 200;
-- 재고가 0보다 작아지면 롤백
SELECT CASE
WHEN (SELECT stock FROM inventory WHERE product_id = 200) < 0 THEN
ROLLBACK
ELSE
COMMIT
END CASE;
이 구조는 비즈니스 로직 조건에 따라 트랜잭션을 선택적으로 취소하는 대표적인 예시이다.
조건 기반 롤백 처리는 실무에서 자주 쓰이는 패턴이다.
🧪 실전 예제 3 – 예외 발생 시 롤백 처리 (Stored Procedure 내 사용)
DELIMITER //
CREATE PROCEDURE TransferMoney()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
END;
START TRANSACTION;
UPDATE accounts SET balance = balance - 1000 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 1000 WHERE account_id = 2;
COMMIT;
END;
//
DELIMITER ;
위와 같이 저장 프로시저(Stored Procedure) 내부에서도 ROLLBACK은 자주 활용되며,
오류 발생 시 자동으로 실행되도록 예외 처리 핸들러와 함께 사용된다.
✅ COMMIT vs ROLLBACK 비교
| 항목 | COMMIT | ROLLBACK |
| 기능 | 변경 사항을 확정 | 변경 사항을 취소 |
| 트랜잭션 종료 여부 | 종료 | 종료 |
| 실행 조건 | 정상 처리 완료 시 | 예외 또는 오류 발생 시 |
| 실행 이후 상태 | 되돌릴 수 없음 | 변경 이전 상태로 복원 |
트랜잭션은 항상 COMMIT이나 ROLLBACK 중 하나로 종료되어야 한다.
그렇지 않으면 세션이 잠기고, 데이터 무결성에도 악영향을 줄 수 있다.
✅ 주의사항 및 실무 팁
- COMMIT 이후에는 ROLLBACK이 불가능하다. 반드시 실행 전에 데이터를 재확인해야 한다.
- ROLLBACK은 트랜잭션 내부에서만 유효하다. 트랜잭션을 시작하지 않은 경우에는 아무 효과도 없다.
- ROLLBACK TO SAVEPOINT 명령어를 사용하면 부분 롤백도 가능하다.
- ROLLBACK 후에는 필요한 경우 로그 테이블 등을 통해 작업 히스토리를 기록하는 것도 좋은 방법이다.
📌 요약
- ROLLBACK은 트랜잭션 내 변경 사항을 모두 취소하는 명령어이다.
- autocommit이 비활성화된 상태에서만 유효하다.
- 오류, 예외, 조건 불일치 시 데이터 정합성을 지키기 위해 필수로 사용된다.
- 실무에서는 예외처리, 조건검사, 저장 프로시저 등 다양한 방식과 함께 활용된다.
📎 공식 문서 참고
- MySQL ROLLBACK 공식 문서
https://dev.mysql.com/doc/refman/8.0/en/commit.html
'DB' 카테고리의 다른 글
| [MySQL] SET autocommit = 0/1 완벽 가이드 사용법(오토커밋 설정) (2) | 2025.06.18 |
|---|---|
| [MySQL] RELEASE SAVEPOINT 완벽 가이드 사용법(SAVEPOINT 삭제) (0) | 2025.06.18 |
| [MySQL] ROLLBACK TO SAVEPOINT 완벽 가이드 사용법(SAVEPOINT 까지 롤백) (1) | 2025.06.18 |
| [MySQL] SAVEPOINT 완벽 가이드 사용법(트랜잭션 중간 지점 저장) (1) | 2025.06.17 |
| [MySQL] COMMIT 완벽 가이드 사용법(변경사항 확정) (0) | 2025.06.17 |
| [MySQL] BEGIN 완벽 가이드 사용법(트랜잭션 시작) (0) | 2025.06.17 |
| [MySQL] START TRANSACTION 완벽 가이드 사용법(트랜잭션 제어 시작) (0) | 2025.06.17 |
| [MySQL] SHOW CREATE USER 완벽 가이드 사용법(계정 생성 정보 확인) (0) | 2025.04.02 |