標籤:aik 不執行 round 層級 isolation ola 事務 不同 .so
資料庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。
開啟事務:start transaction;
復原事務(如果事務提交後,不能夠復原):rollback;
提交事務:commit;
事務的4大特性:
1.原子性(automic):同一個事務中多組操作不能夠分割,必須是一個整體
2.一致性(consistent):事務操作前與事務操作後總量保持一致
3.隔離性(isolation):多個事務之間互不干擾
在MySQL中事務有4種隔離等級:read uncommitted(讀取未提交的事務)、read committed(讀取已提交的事務)、repeatable read(可重複讀)、serializable(可序列化的),(層級依次升高,且層級越高對資料庫的效能影響越大)
查看mysql軟體中的交易隔離等級:select @@tx_isolation;
修改mysql軟體預設的隔離等級: set global transaction isolation level 隔離等級
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
不同的隔離等級會引發不同的問題:
當mysql的交易隔離等級為read uncommitted時,會導致髒讀:一個事務可以讀取另一個事務未提交的資料。
解決方案:將交易隔離等級改為read committed,SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
當mysql軟體的交易隔離等級為read committed的時候,會引發不可重複讀取:在同一事物中多次讀取的結果不一致。
解決方案:將交易隔離等級改為repeatable read,SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
改為repeatable read後,若兩個事務同時進行,一個事務改變資料,另一個事務查詢的資料結果不影響,不改變,仍為改變之前的資料。
當mysql軟體的交易隔離等級為repeatable read時,會導致虛讀(幻讀):
4.持久性(durable):資料一旦進入到庫中、表中,就永久存在
MySQL之事務