首頁  >  文章  >  資料庫  >  MySQL中鎖的必要性與分類介紹

MySQL中鎖的必要性與分類介紹

不言
不言轉載
2018-10-17 16:57:372545瀏覽

這篇文章帶給大家的內容是關於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中鎖的必要性與分類介紹


#

以上是MySQL中鎖的必要性與分類介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除