MYSQL事務的四大特性和隔離級別
阿新 • • 發佈:2020-12-22
1.事務的四大特性(ACID)
1.1原子性(Atomicity)
原子性是指事務包含的一系列操作要麼全部成功,要麼全部回滾,事務是一個不可分割的整體
1.2一致性(Consistency)
一致性是指事務必須使資料庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之後都必須處於一致性狀態。
1.3隔離性(Isolation)
一個事務的操作對於其他的事務是不可見的,每個事務都是相互獨立的。
1.4永續性(Durability)
永續性是指一個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。
2.事務的隔離級別
2.1髒讀
髒讀是指一個事務讀取了另一個事務未提交的資料(READ COMMITTED隔離級別可以解決)
2.2不可重複讀
1. 不可重複讀是指在對於資料庫中的某個資料,一個事務範圍內多次查詢卻返回了不同的資料值,這是由於在查詢間隔,被另一個事務修改並提交了(REPEATABLE READ隔離級別可以採用mvcc總是讀取事務最開始的行資料版本(快照)) 2. 一個事務在前後兩次查詢同一範圍的時候,後一次查詢看到了前一次查詢沒有看到的行稱之為Phantom Problem現象,Phantom Problem是指在同一事務下,連續執行兩次同樣的SQL語句可能導致不同的結果,第二次的SQL語句可能會返回之前不存在的行。(InnoDB儲存引擎下REPEATABLE READ隔離級別採用 Next-Key Lock演算法解決)
2.3丟失更新
一個事務的更新操作會被另一個事務的更新操作所覆蓋,從而導致資料的不一致
3.鎖的演算法
3.1Record Lock
單個記錄上的鎖
3.2Gap Lock
間隙鎖,鎖定一個範圍,但不包含記錄本身
3.3Next-Key
Gap Lock+Record Lock,s鎖定一個範圍,並且鎖定記錄本身