這篇文章帶給大家的內容是關於MySQL中鎖的必要性及分類介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
當使用者存取量成長時,資料庫往往是一個系統的效能瓶頸,但不光是效能瓶頸,資料安全也會隨之浮現,這時候鎖機制就非常有必要。
並發造成的資料安全問題主要分為3個面向:髒讀、幻讀、無法重複讀取
#一. 髒讀
## 髒讀就是一個事務讀取到了另一個事務未提交的資料。时间线 事务1 事务2 1 begin; 2 select * from lock where id = 1; 3 begin; 4 update lock set name='dirty'; 6 select * from lock where id = 1; 7 commit; commit;二. 幻讀 幻讀就是一個交易讀到了另一個交易insert的資料
时间线 事务1 事务2 1 begin; 2 select * from lock where id > 1; 3 begin; 4 insert lock select 2; 5 commit; 6 select * from lock where id > 1; 7 commit;三.不可重複讀不可重複讀就是多次讀取統一資料回傳的結果不一致。同臟讀不同,這是讀取已經提交的數據;同幻讀也不同,這邊是更新數據,幻讀是插入數據。
时间线 事务1 事务2 begin; select * from lock where id = 1; begin; update lock set name='non-rr'; commit; select * from lock where id = 1; commit;MySQL透過對交易的隔離來解決以上三種問題
共有4種隔離等級
隔离级别 脏读 幻读 不可重复读 未提交读(RUC) 是 是 是 已提交读(RC) 否 是 是 可重复读(RR) 否 是 否 可串行化 否 否 否MySQL透過鎖定機制來實現交易的隔離鎖定的分類如下
#
以上是MySQL中鎖的必要性與分類介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!