mysql事務與鎖機制 mysql事務與鎖機制

2021-10-19 22:33:39 字數 987 閱讀 5508

在併發下事務會容易出現的一些問題:

資料更新丟失:兩個事務同時操作一條資料,乙個事務因為異常導致資料更新丟失

髒讀 :乙個失誤開始讀取了某行資料,另外乙個事務已經更新了此資料但沒有能夠及時提交。這是相當危險的,因為很可能所有的操作都被回滾。

不可重複讀:乙個事務對同一行資料重複讀取兩次,但是卻得到了不同的結果。例如,在兩次讀取的中途,有另外乙個事務對該型資料進行了修改,並提交。

幻讀:事務在操作過程中進行兩次查詢,第二次查詢的結果包含了第一次查詢中未出現的資料(sql不一定一樣)。這是因為在兩次查詢過程中有另外乙個事務插入資料

在mysql中存在(innodb)事務存在著4中隔離級別,不同的隔離級別對事務的處理不同。

未授權讀取(未提交讀 read uncommitted):read-uncommitted | 0:存在髒讀,不可重複讀,幻讀的問題。如果乙個事務已經開始寫資料,則另外乙個資料則不會允許同時進行寫操作,但允許其他事務讀此行資料。隔離級別可以通過「排他寫鎖」實現。

授權讀取(已讀提交 read committed):read-committed | 1:解決髒讀的問題,存在不可重複讀,幻讀的問題。這個可以通過「排他寫鎖」實現。讀取資料的事務允許其他事務繼續訪問該行資料,但是未提交的寫事務將會禁止其他事務訪問該行。

可重複讀取(repeatable read):repeatable-read | 2:解決髒讀,不可重複讀的問題,存在幻讀的問題,預設隔離級別。可通過「共享鎖」,「排他鎖」實現。讀取資料的事務將會禁止寫事務(但允許讀事務),寫事務則禁止任何其他事務。

序列化(serializable):serializable | 3:解決髒讀,不可重複讀,幻讀,可保證事務安全,但完全序列執行,效能最低。提供嚴格的事務隔離。它要求事務序列化執行,事務只能乙個接著乙個地執行,不能併發執行。如果僅僅通過「行級鎖」是無法實現事務序列化的,必須要通過其他機制保證新插入的資料不會被剛執行查詢操作的事務訪問到。

可以通過 show variables like '%iso%';檢視當前的隔離級別

MySQL事務與鎖機制

在事務的四個特點中,一致性是事務的根本追求,而在某些情況下會對事務的一致性造成破壞,如 事務的併發執行 事務故障或者系統故障 資料庫系統通過併發控制技術和日誌恢復技術來避免這種情況的發生 併發控制技術保證了事務的隔離性,使得資料庫的一致性狀態不會因為併發執行的操作而被破壞。日誌恢復技術保證了事務的原...

Mysql 事務與鎖機制

一.事務四要素 資料庫事務正確執行的四個基本要素包括原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 簡稱acid。目前要實現acid主要有兩種方式 一種是write ahead logging,也就是日誌式的方式 現代資料庫均基於...

MySQL鎖與事務隔離機制

事務行鎖和隔離級別的案例分析 鎖是計算機協調多個程序或執行緒併發訪問某一資源的機制。在資料庫中,除了傳統的計算資源 如cpu ram i o等 的爭用以外,資料也是一種供需要使用者共享的資源。如何保證資料併發訪問的一致性 有效性是所有資料庫必須解決的乙個問題,鎖衝突也是影響資料庫併發訪問效能的乙個重...