MySQL中鎖的必要性及分類介紹
發表時間:2023-07-10 來源:明輝站整理相關軟件相關文章人氣:
[摘要]本篇文章給大家帶來的內容是關于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中鎖的必要性及分類介紹的詳細內容,更多請關注php中文網其它相關文章!
學習教程快速掌握從入門到精通的SQL知識。