MySQL에서는 모든 SQL문이 트랜잭션 대상이 되지는 않는다.
다음과 같은 SQL문이 실행되었을 때 만약 트랜잭션모드이었다고 하더라도 자동적으로 commit되어버린다. 주의 해야한다!
- ALTER FUNCTION ※묵시적 commit은 5.0.13부터..
- ALTER PROCEDURE ※묵시적 commit은 5.0.13부터..
- ALTER TABLE
- BEGIN
- CREATE DATABASE ※묵시적 commit은 5.0.8부터..
- CREATE FUNCTION ※묵시적 commit은 5.0.13부터..
- CREATE INDEX
- CREATE PROCEDURE ※묵시적 commit은 5.0.13부터..
- CREATE TABLE ※묵시적 commit은 5.0.8부터..
- DROP DATABASE ※묵시적 commit은 5.0.8부터..
- DROP FUNCTION ※묵시적 commit은 5.0.13부터..
- DROP INDEX
- DROP PROCEDURE ※묵시적 commit은 5.0.13부터..
- DROP TABLE
- LOAD MASTER DATA
- LOCK TABLES
- LOAD DATA INFILE
- RENAME TABLE
- SET AUTOCOMMIT=1
- START TRANSACTION
- TRUNCATE TABLE ※묵시적 commit은 5.0.8부터..
- UNLOCK TABLES
◎스냅샷의 타이밍
보통 InnoDB의 REPEATABLE READ에서는 SELECT한 시점의 데이터가 스탭샷용으로 보존된다. 그러나 START TRANSACTION WITH CONSISTENT SNAPSHOT의 경우에는 이 문장을 실행한 때의 데이터를 스냅샷용으로 보존한다.