MySQL에서 START TRANSACTION, COMMIT, ROLLBACK 같은 트랜잭션 제어 명령어를 자유롭게 사용하기 위해서는
가장 먼저 알아야 할 명령어가 있다.
바로 SET autocommit = 0 또는 SET autocommit = 1 명령어이다.
이 명령어는 트랜잭션 모드를 수동 또는 자동으로 전환하는 설정으로,
모든 트랜잭션 기반 작업의 기반이 된다.

🔍 autocommit이란?
autocommit은 MySQL에서 DML(INSERT, UPDATE, DELETE) 명령을 실행할 때 자동으로 COMMIT을 수행할지 여부를 결정하는 설정값이다.
- autocommit = 1: 기본값. 각 SQL 실행 시마다 자동으로 COMMIT됨.
- autocommit = 0: 트랜잭션을 수동으로 제어. COMMIT 또는 ROLLBACK을 명시적으로 호출해야 함.
SET autocommit = 0; -- 수동 트랜잭션 모드
SET autocommit = 1; -- 자동 커밋 모드 (기본값)
즉, autocommit = 0을 설정해야만 START TRANSACTION, COMMIT, ROLLBACK, SAVEPOINT 등이 의미 있게 작동하게 된다.
✅ autocommit 설정이 중요한 이유
트랜잭션을 사용한다고 선언해도, autocommit 설정이 1이라면 모든 DML 작업은 실행 즉시 자동 저장된다.
이렇게 되면 ROLLBACK이나 SAVEPOINT를 사용할 수 없으며,
데이터 정합성을 유지해야 하는 중요한 작업에 치명적인 문제가 발생할 수 있다.
예시 비교
-- 자동 커밋 모드 (autocommit = 1)
UPDATE account SET balance = balance - 10000 WHERE id = 1;
-- 즉시 저장됨 → ROLLBACK 불가능
-- 수동 커밋 모드 (autocommit = 0)
SET autocommit = 0;
START TRANSACTION;
UPDATE account SET balance = balance - 10000 WHERE id = 1;
ROLLBACK; -- 변경 내용 취소됨
결론적으로, MySQL에서 트랜잭션을 제대로 쓰고 싶다면 SET autocommit = 0이 필수이다.
⚙️ 기본 구문
-- 자동 커밋 끄기
SET autocommit = 0;
-- 자동 커밋 켜기 (기본값)
SET autocommit = 1;
해당 설정은 현재 세션(Session)에서만 유효하며,
MySQL에 다시 접속하면 기본값인 autocommit = 1로 초기화된다.
🧪 실전 예제 1 – 트랜잭션 모드 전환
-- 트랜잭션 수동 설정
SET autocommit = 0;
START TRANSACTION;
INSERT INTO logs (message) VALUES ('시작');
UPDATE logs SET message = '진행 중' WHERE id = 1;
ROLLBACK; -- 전체 취소
COMMIT; -- 반영 완료
이 예제에서는 autocommit을 꺼놓은 상태에서,
트랜잭션 내부에서 INSERT와 UPDATE를 실행한 후 조건에 따라 ROLLBACK 또는 COMMIT을 수행한다.
🧪 실전 예제 2 – autocommit 설정 없이 트랜잭션 시도 시 문제
-- autocommit 기본값 상태
START TRANSACTION;
UPDATE users SET point = point + 500 WHERE id = 5;
ROLLBACK; -- 이미 반영되어 효과 없음
이처럼 autocommit = 1 상태에서는 트랜잭션을 시작했더라도
변경사항이 자동으로 반영되기 때문에 ROLLBACK이 무효화된다.
🔄 autocommit 상태 확인 방법
현재 세션의 autocommit 설정 값을 확인하려면 다음 명령어를 사용할 수 있다.
SELECT @@autocommit;
- 1: 자동 커밋 모드
- 0: 수동 트랜잭션 모드
이 명령어는 디버깅이나 트랜잭션 흐름 제어 시 매우 유용하게 사용된다.
🧠 실무 팁
- 트랜잭션이 필요한 모든 작업(예: 금융, 주문, 포인트 적립 등)은 반드시 autocommit = 0을 먼저 설정해야 한다.
- SET autocommit = 0 다음에는 반드시 COMMIT 또는 ROLLBACK으로 트랜잭션을 종료해주어야 한다.
- 저장 프로시저 내에서는 autocommit 설정을 임시로 껐다가 다시 켜는 방식도 사용 가능하다.
SET autocommit = 0;
-- 트랜잭션 작업
COMMIT;
SET autocommit = 1;
⚠️ 주의사항
- autocommit = 0을 설정한 후 트랜잭션을 종료하지 않으면 세션이 계속 열린 상태로 남아 서버 자원이 낭비된다.
- 트랜잭션을 너무 오래 유지하면 데이터 락(Lock)이 발생하여 다른 사용자 작업에 영향을 줄 수 있다.
- 다중 접속 환경에서는 autocommit을 켜는 타이밍을 명확하게 관리하는 것이 중요하다.
📌 요약
| 명령어 | SET autocommit = 0/1 |
| 기본값 | 1 (자동 커밋 모드) |
| 수동 설정 | SET autocommit = 0 |
| 적용 범위 | 현재 세션 |
| 필요 조건 | 트랜잭션 사용 전 필수 설정 |
| 주의 사항 | 설정 후 반드시 COMMIT 또는 ROLLBACK 필요 |
📎 공식 문서 참고
- MySQL autocommit 공식 문서:
https://dev.mysql.com/doc/refman/8.0/en/commit.html
'DB' 카테고리의 다른 글
| [MySQL] INSERT IGNORE 사용법 완벽 가이드(데이터 중복 방지) (0) | 2025.06.19 |
|---|---|
| [MySQL] INSERT INTO ... SET 사용법 완벽 가이드 (1) | 2025.06.19 |
| [MySQL] INSERT 다중 행 삽입 사용법 완벽 가이드 (1) | 2025.06.19 |
| [MySQL] INSERT 기본 사용법 완벽 가이드 (0) | 2025.06.19 |
| [MySQL] RELEASE SAVEPOINT 완벽 가이드 사용법(SAVEPOINT 삭제) (0) | 2025.06.18 |
| [MySQL] ROLLBACK TO SAVEPOINT 완벽 가이드 사용법(SAVEPOINT 까지 롤백) (1) | 2025.06.18 |
| [MySQL] SAVEPOINT 완벽 가이드 사용법(트랜잭션 중간 지점 저장) (1) | 2025.06.17 |
| [MySQL] ROLLBACK 완벽 가이드 사용법(변경사항 취소) (0) | 2025.06.17 |