innodb外键造成的锁定机制

相关文章见:

http://www.mysqlperformanceblog.com/2006/12/12/innodb-locking-and-foreign-keys/

 

innodb支持外键,但是由于外键,也会对innodb表增加锁定机制;所有的外键相关的操作都在数据更改时,比如检查数据完整性、增加锁定等;

 

假设一个表为parent,一个表为child,parent通过id和child的parent_id相连接;在一个session中set autocommit=0,执行对parent或child的操作,在另一个session执行对child或parent的操作,从而得出以下结论:

(1)对父表的操作

1)insert to parent,新插入行的id值为XXX

child会锁外键值为XXX的行,不会锁其他行

 

2)update parent,原id为XXX,现id为YYY

child会锁外键值为XXX,YYY的行,不会锁其他行

 

3)delete from parent,删除行的id为XXX

child会锁外键值为XXX,不会锁其他行

 

======================

 

(2)对子表的操作

1)insert to child,插入行的外键值为XXX

parent会锁值XXX的行,不会锁其他行

 

2)update child,更新行的外键值原为XXX,现为YYY

parent会锁XXX,YYY行,但要注意:存在间隔锁,也会锁其他行(XXX,YYY之间的位置)

 

3)delete from child,删除行的外键值为XXX

parent会锁XXX的行,但要注意:存在间隔锁,也会锁其他行(XXX-1的位置)

 

 

 

阅读更多
文章标签: insert delete session
个人分类: 数据库
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭