innodb外來鍵造成的鎖定機制

2021-05-22 18:17:39 字數 807 閱讀 5325

innodb支援外來鍵,但是由於外來鍵,也會對innodb表增加鎖定機制;所有的外來鍵相關的操作都在資料更改時,比如檢查資料完整性、增加鎖定等;

假設乙個表為parent,乙個表為child,parent通過id和child的parent_id相連線;在乙個session中set autocommit=0,執行對parent或child的操作,在另乙個session執行對child或parent的操作,從而得出以下結論:

(1)對父表的操作

1)insert to parent,新插入行的id值為***

child會鎖外鍵值為***的行,不會鎖其他行

2)update parent,原id為***,現id為yyy

child會鎖外鍵值為***,yyy的行,不會鎖其他行

3)delete from parent,刪除行的id為***

child會鎖外鍵值為***,不會鎖其他行

(2)對子表的操作

1)insert to child,插入行的外鍵值為***

parent會鎖值***的行,不會鎖其他行

2)update child,更新行的外鍵值原為***,現為yyy

parent會鎖***,yyy行,但要注意:存在間隔鎖,也會鎖其他行(***,yyy之間的位置)

3)delete from child,刪除行的外鍵值為***

parent會鎖***的行,但要注意:存在間隔鎖,也會鎖其他行(***-1的位置)

外來鍵造成的死鎖

在建表的過程中有部門,崗位,員工三個表,首先崗位表post的外來鍵department id對應部門department的department id欄位,可以說明這個崗位屬於哪個部門的,另外員工表employee的post id欄位對應post表的post id欄位,這樣可以找到該員工的崗位資訊,以...

mysql臨鍵鎖 innodb臨鍵鎖鎖定範圍

臨鍵鎖解決當前讀的幻讀問題 通過鎖定範圍,使另外乙個事務不能插入 mvcc解決不加鎖讀的幻讀問題。create table test id int,grade char 1 name varchar 20 primary key id key grade idx grade engine innod...

mysql 外來鍵鎖機制

在mysql的多個儲存引擎中,innodb支援外來鍵,但是由於外來鍵,也會對innodb表增加鎖定機制 所有的外來鍵相關的操作都在資料更改時,比如檢查資料完整性 增加鎖定等 假設乙個表為test tab,乙個表為child,test tab通過id和child的test tab id相連線 在乙個s...