當使用者訪問量增長時,資料庫往往是乙個系統的效能瓶頸,但不光光是效能瓶頸,資料安全也會隨之浮現,這時候鎖機制就非常有必要。
併發造成的資料安全問題主要分為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通過鎖機制來實現事務的隔離
鎖的分類如下
Vue v for指令中 key 的必要性
當 vue 正在更新使用 v for 渲染的元素列表時,它預設使用 就地更新 的策略。如果資料項的順序被改變,vue 將不會移動 dom 元素來匹配資料項的順序,而是就地更新每個元素,並且確保它們在每個索引位置正確渲染。這個預設的模式是高效的,但是只適用於不依賴子元件狀態或臨時 dom 狀態 例如 ...
二丶多執行緒的高階一(鎖)
多個執行緒訪問同乙個資料的時候,就會操作執行緒的安全的問題,因為執行緒內部操作其實是先取值,然後修改,最後再更新記憶體中的資料。這樣由於多個執行緒的切換就會導致執行緒安全的問題,比如我們的i 就不是執行緒安全。1.執行緒的安全的原因 由於原子性被破壞。核心思想,對我們的資源進行加鎖,當前只能有乙個執...
mysql a鎖 MYSQL中的鎖
前言 剛開始接觸mysql,對其鎖機制並不了解,在專案裡面,針對死鎖以及鎖競爭,約定了兩條規則。對涉及多個業務表的更新,要遵守一定的順序,如按照table a,table b,table c的次序 對乙個業務表的更新,要先排序,按順序執行更新操作。下面就在mysql中對一些場景進行演示。死鎖死鎖產生...