MySQL之事務
數據庫事務(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之事務