2007年10月8日 星期一

MySQL 交易功能

可再參考最新整理:MySQL 交易功能 Transaction 整理 


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 ReadNonrepeatable ReadPhantom ReadRepeatable Read
Read UncommittedPossiblePossiblePossiblePossible
Read CommittedNot PossiblePossiblePossiblePossible
Repeatable ReadNot PossibleNot PossiblePossible(but unlikely)Possible
SerializableNot PossibleNot PossibleNot PossiblePossible

沒有留言:

張貼留言