2009년 4월 11일 토요일

InnoDB - 트랜잭션2

◎트랜잭션이 무효인 SQL문

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의 경우에는 이 문장을 실행한 때의 데이터를 스냅샷용으로 보존한다.