1. 程式人生 > >MySQL之事務

MySQL之事務

evel con 影響 數據庫事務 整體 一個 回滾 持久性 glob

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