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

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

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享