MySQL은 AUTOCOMMIT 세션 변수를 통해 두 가지 모드로 트랜잭션의 동작을 관리할 수 있습니다. 각 모드의 특징과 사용 방법을 자세히 살펴보겠습니다.
1. Autocommit On (자동 커밋 활성화)
이 모드는 MySQL의 기본 설정입니다. Autocommit On 상태에서는 트랜잭션 내부에 있는지 여부와 관계없이, 실행되는 모든 SQL 문장이 하나의 완전한 트랜잭션으로 취급되며, 문장 실행이 끝나는 즉시 자동으로 커밋(COMMIT)됩니다.
이 모드는 세션 변수 AUTOCOMMIT을 1로 설정하여 활성화할 수 있습니다.
SET AUTOCOMMIT = 1 mysql> SET AUTOCOMMIT = 1; Query OK, 0 rows affected (0.07 sec)
2. Autocommit Off (자동 커밋 비활성화)
이 모드는 기본값이 아닌 선택적 모드입니다. Autocommit Off 상태에서는 이후에 실행되는 일련의 SQL 문장들이 하나의 트랜잭션처럼 동작하며, 사용자가 명시적으로 COMMIT 문장을 실행하기 전까지는 어떠한 변경 사항도 데이터베이스에 반영(커밋)되지 않습니다.
이 모드는 세션 변수 AUTOCOMMIT을 0으로 설정하여 활성화할 수 있습니다.
SET AUTOCOMMIT = 0 mysql> SET AUTOCOMMIT = 0; Query OK, 0 rows affected (0.00 sec)
두 모드의 핵심 차이점 정리
- Autocommit = 1: 각 SQL 문장이 즉시 커밋되어 영구적으로 저장됩니다.
- Autocommit = 0: 명시적인 COMMIT이 실행될 때까지 변경 사항이 임시로 유지되며, 필요 시 ROLLBACK으로 되돌릴 수 있습니다.
여러 개의 SQL 문장을 하나의 작업 단위로 묶어 처리해야 하는 경우에는 Autocommit Off 모드를 활용하는 것이 안전합니다. 예를 들어, 계좌 이체처럼 출금과 입금이 반드시 함께 성공하거나 함께 실패해야 하는 작업에서 트랜잭션 제어가 필수적입니다.