當用戶訪問量增加時,數據庫每每是一個系統的性能瓶頸,但不光光是性能瓶頸,數據安全也會隨之浮現,這時候鎖機制就很是有必要。 併發形成的數據安全問題主要分爲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經過鎖機制來實現事務的隔離
鎖的分類以下
spa