教程集 www.jiaochengji.com
教程集 >  数据库  >  mysql  >  正文 解析mysql中innodb外键造成的锁定机制

解析mysql中innodb外键造成的锁定机制

发布时间:2015-12-12   编辑:jiaochengji.com
本文介绍下,mysql中innodb存储类型造成的锁定机制的相关内容,有需要的朋友,参考下吧。

在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的位置)

有了以上的介绍,相信对mysql中innodb外键的锁定机制,一定有所了解与掌握了吧。
脚本学堂,祝大家学习进步。

您可能感兴趣的文章:
解析mysql中innodb外键造成的锁定机制
MySQL 添加外键的实例分享
mysql innodb优化配置方法分享
mysql LOCK TABLES和UNLOCK TABLES
MySQL数据库之锁的详解
深入分析MySQL更新死锁问题
mysql innodb数据库引擎解析
mysql如何锁定单个表
mysql数据库自增id用法大全
详解mysql 锁表 for update (引擎/事务)

[关闭]
~ ~