MySQL事務隔離整理

事務:保證一組數據庫操作,要麼全部成功,要麼全部失敗。MySQL中事務支持在引擎層實現。MySQL是一個支持多引擎的系統,不是所有的MySQL引擎都支持事務。

 

1.事務ACID原則

Atomicity,Consistency,Isolation,Durability

 

2.事務隔離級別(多事務數據處理)

讀未提交:可讀取到另一個未提交的事務數據變更,會出現髒讀,不可重複讀。

讀提交:只有事務提交之後,其他事務纔可讀取到它的值;另一個意思:一旦事務提交,其他事務就能讀取到它的值。會出現不可重複讀。

可重複讀:一個事務看到的值,與這個事務啓動時看到的值是一致的。另一個意思:其他事務提交了,如果當前事務沒提交,其他事務的提交對當前事務來講無意義。會出現幻讀:比如一個事務要更新所有的數據,但是另一個事務新增了一條數據,那麼操作第一個事務的人會發現表中還存在沒有修改的一行數據。

串行化:對於同一行數據,事務操作嚴格按順序執行。讀數據加讀鎖,寫數據加寫鎖。

事務隔離級別由上往下性能從高到底,安全性由低到高變化。一般MySQL隔離基本爲可重複讀。

 

3.事務隔離怎麼實現的?

每次數據修改都記錄一條回滾日誌,如果某個事物需要回滾,會嚴格按照記錄的回滾日誌依次回滾。

 

4.長事務,短事務。

如果一個事務很長時間不提交,即爲長事務,長事務會導致回滾日誌不刪除,所以儘量不要使用。

 

5.事務啓動方式

(1)顯示啓動:begin transaction,存在多一次交互問題,即begin語句的開銷,可以使用commit work and chain語法優化。

(2)set autocommit=0。將自動提交關閉,執行select語句時就開啓了事務,需要手動提交事務,否則可能導致長事務問題。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章