一、innodb行锁分类
record lock:记录锁,也就是仅仅锁着单独的一行
gap lock:区间锁,仅仅锁住一个区间(注意这里的区间都是开区间,也就是不包括边界值。
next-key lock:record lock+gap lock,所以next-key lock也就半开半闭区间,且是下界开,上界闭。 www.zzvips.com
next-key 锁定范围:(负无穷大,最小第一记录],(记录之间],(最大记录,正无穷大)
二、语句锁定情况分析
SELECT ... FROM ... FOR UPDATE对读遇到的所有索引记录设置独占的next-key锁定。
INSERT INTO ... VALUES (...)对被插入的行设置独占锁定。注意,这不是一个next-key锁定,并且不阻止其它用户在已插入行之前的间隙插入。如果发生重复键错误,对重复的索引记录设置共享锁定。
· 在一个表上初始化之前指定的AUTO_INCREMENT列之时,InnoDB在与AUTO_INCREMENT列相关联的索引的末尾设置独占锁定。在访问自动增长计数器中,InnoDB使用专用的表锁定模式AUTO-INC,其中锁定仅持续到当前SQL语句的结束,而不是到整个事务的结束。InnoDB取回先前初始化的AUTO_INCREMENT列的值而不设定任何锁定。
INSERT INTO T SELECT ... FROM S WHERE ... 对每个插入到T的行设置独占(非next-key)锁定。它在S上把搜索当作一个持续读,但是如果MySQL二进制日志功能被打开,它就对S设置一个共享的next-key锁
定。InnoDB在后一种情况不得不设置锁定:在从一个备份的前滚恢复中,每个SQL语句不得不以与它最初被执行的方式完全同样的方式执行。
· CREATE TABLE ... SELECT ... 把SELECT当作一个持续读来执行,或者带着共享锁定来执行,如前面的条目所述。
· 如果唯一键没有冲突,REPLACE象一个插入一样被做。另外,对必须更新的行设置一个独占的nextkey锁定。
· UPDATE ... WHERE ... 对搜索遇到的每个记录设置一个独占的next-key锁定。
· DELETE FROM ... WHERE ... 对搜索遇到的每个记录设置一个独占的next-key锁定。
· 如果对一个表定义FOREIGN KEY约束,任何需要检查约束条件的插入,更新或删除对它看着检查约束的记录设置共享行级锁定。InnoDB在约束失败的情况下也设置这些锁定。
mysql之innodb的锁分类介绍
2019-12-12 16:27MYSQL教程网 Mysql
本文将介绍mysql之innodb的锁分类,需要了解更多的朋友可以参考下
延伸 · 阅读
- 2019-12-12Ubuntu10下如何搭建MySQL Proxy读写分离探讨
- 2019-12-12mysql如何按照中文排序解决方案
- 2019-12-12java连接Mysql数据库的工具类
- 2019-12-11ubuntu提示无法获得锁lock该怎么解决?
- 2019-12-11mysql error 1130 hy000:Host'localhost'解决方案
- 2019-12-11如何解决mysql重装失败方法介绍
- Mysql
详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始
注意:这里说的delete是指不带where子句的delete语句 相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据 ...
- Mysql
navicat 8 创建数据库与创建用户分配权限图文方法
navicat是一款不错的图形化管理mysql的工具,大家一般都是用phpmyadmin或直接命令行操作,对于不是很熟悉命令的朋友,就可以使用navicat这个工具了,方便操...
- Mysql
MYSQL explain 执行计划
explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 ...
- Mysql
怎样正确创建MySQL索引的方法详解
今天小编就为大家分享一篇关于怎样正确创建MySQL索引的方法详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随...
- Mysql
MySQL分页Limit的优化过程实战
在mysql中进行分页查询时,一般会使用limit查询,下面这篇文章主要给大家介绍了关于MySQL分页Limit优化的相关资料,文中通过示例代码介绍的非常详细,需...
- Mysql
MySQL数据表字段内容的批量修改、清空、复制等更新命令
MySQL数据表字段内容的批量修改、清空、复制等更新命令,需要的朋友可以参考下。 ...
- Mysql
MySQL数据库恢复(使用mysqlbinlog命令)
binlog是通过记录二进制文件方式来备份数据,然后在从二进制文件将数据恢复到某一时段或某一操作点。 ...
- Mysql
mySQL中LEN()与DATALENGTH()的区别
LEN返回指定字符串表达式的字符数,其中不包含尾随空格。DATALENGTH返回用于表示任何表达式的字节数。 ...