MySQL中的鎖之一 鎖的必要性及分類

2021-09-13 03:37:37 字數 1783 閱讀 7645

當使用者訪問量增長時,資料庫往往是乙個系統的效能瓶頸,但不光光是效能瓶頸,資料安全也會隨之浮現,這時候鎖機制就非常有必要。

併發造成的資料安全問題主要分為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中對一些場景進行演示。死鎖死鎖產生...