mysql之innodb的锁分类介绍

 更新时间:2012年11月20日 15:51:11   作者:  
本文将介绍mysql之innodb的锁分类,需要了解更多的朋友可以参考下
一、innodb行锁分类

record lock:记录锁,也就是仅仅锁着单独的一行
gap lock:区间锁,仅仅锁住一个区间(注意这里的区间都是开区间,也就是不包括边界值。
next-key lock:record lock+gap lock,所以next-key lock也就半开半闭区间,且是下界开,上界闭。 www.jb51.net
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 delete删除数据后释放磁盘空间的操作方法

    MySQL delete删除数据后释放磁盘空间的操作方法

    这篇文章主要介绍了MySQL delete删除数据后,释放磁盘空间,文中给大家介绍了优化表空间的多种方法,每种方法给大家介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • MySQL之select、distinct、limit的使用

    MySQL之select、distinct、limit的使用

    这篇文章主要介绍了MySQL之select、distinct、limit的使用,下面文章围绕select、distinct、limit的相关资料展开聚集内容,需要的朋友可以参考一下
    2021-11-11
  • MySQL 5.7双主同步部分表的实现过程详解

    MySQL 5.7双主同步部分表的实现过程详解

    这篇文章主要给大家介绍了关于MySQL 5.7双主同步部分表实现的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • Linux系统下实现远程连接MySQL数据库的方法教程

    Linux系统下实现远程连接MySQL数据库的方法教程

    MySQL默认root用户只能本地访问,不能远程连接管理mysql数据库,Linux如何开启mysql远程连接?下面这篇文章主要给大家介绍了在Linux系统下实现远程连接MySQL数据库的方法教程,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06
  • 使用mysqldump实现mysql备份

    使用mysqldump实现mysql备份

    mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)。今天我们就来详细探讨下mysqldump的使用方法
    2016-11-11
  • Windows 本地安装 Mysql8.0图文教程

    Windows 本地安装 Mysql8.0图文教程

    本文介绍了如何在Windows本地安装Mysql8.0。从下载Mysql8.0安装包,运行安装程序,配置初始设置到启动Mysql服务等详细步骤进行了讲解。
    2023-04-04
  • Oracle和MySQL中生成32位uuid的方法举例(国产达梦同Oracle)

    Oracle和MySQL中生成32位uuid的方法举例(国产达梦同Oracle)

    近日遇到朋友问及如何生成UUID,UUID是通用唯一识别码(Universally Unique Identifier)方法,这里给大家总结下,这篇文章主要给大家介绍了关于Oracle和MySQL中生成32位uuid的方法,需要的朋友可以参考下
    2023-08-08
  • MySQL常用表级操作总结

    MySQL常用表级操作总结

    这篇文章主要为大家详细介绍了MySQL中常用的表级操作,文中的示例代码简洁易懂,对我们学习MySQL有一定的帮助,感兴趣的小伙伴可以学习一下
    2023-08-08
  • mysql使用left join连接出现重复问题的记录

    mysql使用left join连接出现重复问题的记录

    这篇文章主要介绍了mysql使用left join连接出现重复问题的记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • MySQL实现字符串截取的图文教程

    MySQL实现字符串截取的图文教程

    在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些,这篇文章主要给大家介绍了关于MySQL实现字符串截取的相关资料,需要的朋友可以参考下
    2022-03-03

最新评论