InnoDB行鎖,如何鎖住一條不存在的記錄?

2021-08-22 15:21:17 字數 1251 閱讀 1104

四種隔離級別

說起。

四種隔離級別,又脫不開聊

讀髒,不可重複讀,讀幻象

等問題。

事務隔離級別,行鎖機制等都比較垂直,應用開發中大部分同學都用不到,不確定是否大部分朋友都感興趣。

今天,先丟擲乙個問題,如果大家確定對這類話題感興趣的話,後續我花時間細聊這一系列問題。

mysql預設的事務隔離級別是

repeated read

(rr),假設使用的儲存引擎是innodb,在這個隔離級別下:

(1)讀取到資料,都是

其他事務已提交的資料

; (2)同乙個事務中,相同的連續

讀,得到的結果應該是相同的

; (3)

不會出現insert幻象讀;

假設有資料表:

t(id int pk, name);

假設目前的記錄是:

10, shenjian

20, zhangsan

30, lisi

case 1

事務a先執行,並且處於未提交狀態:

update t set name=』a』 where id=10;

事務b後執行:

update t set name=』b』 where id=10;

因為事務a在pk id=10上加了行鎖,因此事務b會阻塞。

case 2

事務a先執行,並且處於未提交狀態:

delete from t where id=40;

事務a想要刪除一條不存在的記錄

事務b後執行:

insert into t values(40, 『c』);

事務b想要插入一條主鍵不衝突的記錄

問題1

事務b是否阻塞

問題2:如果事務b阻塞,

鎖如何加在一條不存在的記錄上

呢?問題3:事務的

隔離級別,索引型別

,是否對問題1和問題2有影響呢?

如果大家對這些問題感興趣,後續我花時間深入梳理邏輯,畫圖細聊。

如果不感興趣,我換資料庫應用層架構的話題。

是不是很有意思的乙個問題?

猜猜innodb的行鎖是怎麼做到的?

mysql 鎖住一行資料 MySQL 鎖

鎖的由來 我們需要最大程度地利用資料庫的併發訪問,還需要確保每個使用者以一致性的方式讀取和修改資料,為解決此問題,有了鎖的機制 innodb 儲存引擎相對比mysql 資料庫的其他儲存引擎在這方面要技高一籌 mysql 常用引擎 innodb myisam memory 鎖機制用於管理對共享資源的併...

一條常見的行合併問題 SQL

原來問題 現有兩個表 表一originalword id word 101 about 102 abound 103 beard 104 boast 105 beast 表二similarword id original id similar id 1 101 102 2 102 101 3 103...

Oracle不連續的值,如何實現查詢上一條 下一條

檢視得知,資料庫中用於查詢的字段 主鍵 是不連續的。如上圖所示 stxh為主鍵number型別。下一條 select nowid,afterid from select stxh nowid,lead stxh,1 over order by stxh as afterid from exm kst...