DB

[MySQL] SET autocommit = 0/1 완벽 가이드 사용법(오토커밋 설정)

인생아 2025. 6. 18. 14:58
반응형

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 필요
 

📎 공식 문서 참고

반응형