Innodb 鎖的介紹

2021-07-23 21:03:06 字數 1201 閱讀 1860

innodb

與myisam

的最大不同有兩點:一是支援事務(

transaction

);二是採用了行級鎖。

innodb 中的鎖是跟索引有關的,沒有索引就不給上鎖

recode / gap/next-key locks

1、recode :是鎖住某一行記錄

2、gap lock會鎖住某一段範圍中的記錄;

例子:

mysql> select * from ts_column_log_test;

| id | col_id|start_time         |end_time           |data_time          |status  |

|  1 |      2| 2011-12-1311:51:11 | 2011-12-13 11:51:11 | 2011-12-09 00:00:00 | running |

|  2 |     20 |2011-12-13 11:51:16| 2011-12-13 11:51:16 | 2011-12-09 00:00:00 | running |

|  3 |    120 |2011-12-13 11:51:20 |2011-12-13 11:51:20 | 2011-12-09 00:00:00 | running |

3 rows in set (0.00 sec)

開啟兩個不同的會話,分別執行一些語句觀察一下結果:

session1

mysql> set autocommit=0;

mysql> delete from ts_column_log_testwhere col_id=10;

query ok, 0 rows affected(0.00sec)        --此時[2,20)這個區間內的記錄都已經被gap lock鎖住了,如果在其他事務中嘗試插入這些值,則會等待

3、next-key lock 則是前兩者加起來的效果。

舉例來說,假如emp表中只有101條記錄,其empid的值分別是1,2,...,100,101,下面的sql:

select * from  emp where empid > 100 for update;

是乙個範圍條件的檢索,innodb不僅會對符合條件的empid值為101的記錄加鎖,也會對empid大於101(這些記錄並不存在)的「間隙」加鎖。

mysql之innodb的鎖分類介紹

一 innodb行鎖分類 record lock 記錄鎖,也就是僅僅鎖著單獨的一行 gap lock 區間鎖,僅僅鎖住乙個區間 注意這裡的區間都是開區間,也就是不包括邊界值。next key lock record lock gap lock,所以next key lock也就半開半閉區間,且是下界...

mysql之innodb的鎖分類介紹

一 inn程式設計客棧odb行鎖分類 record lock 記錄鎖,也就是僅僅鎖著單獨的一行 gap lock 區間鎖僅僅鎖住乙個區間 注意這裡的區間都是開區間,也就是不包括邊界值。next key lock record lock gap lock,所以next key lock也就半開半閉區間...

MySQL中InnoDB鎖的介紹及用途

讀這篇文章之前可以先了解一下mysql中innodb資料結構 事務隔離級別 髒讀不可重複讀 幻讀讀未提交 read uncommitted 可能可能 可能不可重複讀 read committed 不可能可能 可能可重複讀 repeatable read 不可能不可能 innodb不可能 序列化 se...