MySQL 트랜잭션이란?
MySQL에서 START TRANSACTION 명령어를 실행하면 새로운 트랜잭션을 시작할 수 있습니다. 이때 트랜잭션의 동작 방식은 SQL의 AUTOCOMMIT 모드 설정에 따라 달라집니다.
1. AUTOCOMMIT ON 모드 (기본값)
기본 모드인 'AUTOCOMMIT ON' 상태에서는 각각의 MySQL 문장이 하나의 완전한 트랜잭션으로 취급되며, 문장 실행이 끝나면 자동으로 커밋(commit)됩니다. 이 모드는 세션 변수 AUTOCOMMIT 값을 1로 설정하여 활성화할 수 있습니다.
SET AUTOCOMMIT = 1 mysql> SET AUTOCOMMIT = 1; Query OK, 0 rows affected (0.07 sec)
2. AUTOCOMMIT OFF 모드
만약 사용자가 기본 동작 방식을 변경하고 싶다면 'AUTOCOMMIT OFF' 모드로 전환하면 됩니다. 이 모드에서는 이후에 실행되는 일련의 MySQL 문장들이 하나의 트랜잭션처럼 작동하며, 명시적으로 COMMIT 문을 실행하기 전까지는 어떠한 변경 사항도 데이터베이스에 반영(커밋)되지 않습니다.
또한 이 모드에서는 새 세션의 첫 번째 실행 가능한 문장이 자동으로 다중 문장(multi-statement) 트랜잭션을 암시적으로 시작합니다.
SET AUTOCOMMIT = 0 mysql> SET AUTOCOMMIT = 0; Query OK, 0 rows affected (0.00 sec)
참고: InnoDB 스토리지 엔진에서 트랜잭션을 처리할 때는 SET AUTOCOMMIT = 0 대신 COMMIT 명령어로 커밋하는 것이 권장됩니다.
3. START TRANSACTION으로 트랜잭션 시작하기
위의 두 가지 SQL 모드 어느 경우에든, 아래와 같이 START TRANSACTION 명령어를 사용하면 트랜잭션을 시작할 수 있습니다.
mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec)
실제로 위 쿼리는 MySQL에게 "트랜잭션이 종료될 때까지 이후에 실행되는 모든 문장들을 하나의 작업 단위(work unit)로 처리하라"고 알려주는 역할을 합니다. 이를 통해 여러 개의 SQL 문장을 하나의 논리적 단위로 묶어 원자성(atomicity)을 보장할 수 있습니다.