1. 程式人生 > >mysql 外來鍵鎖機制

mysql 外來鍵鎖機制

在mysql的多個儲存引擎中,innodb支援外來鍵,但是由於外來鍵,也會對innodb表增加鎖定機制;

所有的外來鍵相關的操作都在資料更改時,比如檢查資料完整性、增加鎖定等;

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

一、對父表的操作

1:insert to test_tab,新插入行的id值為XXX
child會鎖外來鍵值為XXX的行,不會鎖其他行


2:update test_tab,原id為XXX,現id為YYY
child會鎖外來鍵值為XXX,YYY的行,不會鎖其他行

3:delete from test_tab,刪除行的id為XXX
child會鎖外來鍵值為XXX,不會鎖其他行

二、對子表的操作

1:insert to child,插入行的外來鍵值為XXX
test_tab會鎖值XXX的行,不會鎖其他行

2:update child,更新行的外來鍵值原為XXX,現為YYY
test_tab會鎖XXX,YYY行,但要注意:存在間隔鎖,也會鎖其他行(XXX,YYY之間的位置)

3:delete from child,刪除行的外來鍵值為XXX
test_tab會鎖XXX的行,但要注意:存在間隔鎖,也會鎖其他行(XXX-1的位置)