http://dev.mysql.com/doc/refman/5.1/zh/index.html
如果您正在使用一個事務安全型的存儲引擎(如InnoDB, BDB或NDB簇),則您可以使用以下語句禁用autocommit模式:
SET AUTOCOMMIT=0;通過把AUTOCOMMIT變量設置為零,禁用autocommit模式之後,您必須使用COMMIT把變更存儲到磁盤中,或著如果您想要忽略從事務開始進行以來做出的變更,使用ROLLBACK。
如果您想要對於一個單一系列的語句禁用autocommit模式,則您可以使用START TRANSACTION語句:
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;使用START TRANSACTION,autocommit仍然被禁用,直到您使用COMMIT或ROLLBACK結束事務為止。然後autocommit模式恢復到原來的狀態。
http://blog.roodo.com/ohyeh/archives/1913450.html
autocommit = 0(不必下start transaction就有transaction的功能)
查詢是否自動commit
select @@autocommit;
查詢目前的transaction isolation level設定:
select @@tx_isolation;
設定transaction isolation level:
SET TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
transaction isolation level (隔離等級):
1. read uncommitted (dirty read) tx2會看到tx1的log檔的資料
2. read committed (非重覆讀取) tx2能取得tx1 commit後的資料(DB的資料)
3. repeatable read (重覆讀取) 同一個tx讀的資料都一樣,除非換了一個新的Tx才會抓到commit後的資料
4. serializable (循序讀取) 同一個時間,只充許一個tx
MySQL內定是repeatable read
現在的DB都是read committed 或 repeatable read
Dirty Read | Nonrepeatable Read | Phantom Read | Repeatable Read | |
Read Uncommitted | Possible | Possible | Possible | Possible |
Read Committed | Not Possible | Possible | Possible | Possible |
Repeatable Read | Not Possible | Not Possible | Possible(but unlikely) | Possible |
Serializable | Not Possible | Not Possible | Not Possible | Possible |
沒有留言:
張貼留言