对MySQLInnoDB锁分类介绍
记录锁:记录锁,也就是说只有一行被锁定。
间隙锁:一种区间锁,仅用于锁定一个间隔(请注意这里的间隔是一个开区间,即不包括边界值。
下一个键锁:记录锁+间隙锁,所以下一个键锁也是半开半闭区间,下界是上限。
下一个键锁定范围:(负无穷大,最小第一个记录},(在记录},(最大记录,正无穷)之间)
两。句子锁定分析
选择…从…用于更新设置所有读取的索引记录的唯一下一个键锁定。
插入…值(…)设置插入行上的独占锁。注意这不是下一个键锁,并且不阻止其他用户插入插入行之前插入的空白。如果出现重复密钥错误,则设置重复索引记录上的共享锁。
当auto_increment列指定在表的初始化,InnoDB设置互斥锁在与auto_increment列索引的结束。在访问自动增长计数器,InnoDB使用专用的表锁模式auto-inc,其中锁定只对当前SQL语句的结束,而不是整个transaction.innodb最后把先前初始化auto_increment列的值没有设置任何锁。
插入到T选择…从S那里…插入到T中的每一行的独占(非下键)锁,它将搜索作为s上的连续读取,但是如果MySQL二进制日志函数被打开,它在s上设置一个共享的下一个键锁。
集。在后一种情况下,我们需要建立一个锁:从备份中恢复,每个SQL语句必须在它最初是以同样的方式准确执行。
创建表…选择…将选择执行为连续读取,或将其与共享锁一起执行,如前一项所述。
如果唯一的键不冲突,取代了像插入。此外,独家nextkey锁套必须更新的行。
更新...哪里...为搜索记录的每个记录设置一个专用的下一个键锁。
删除…哪里...为搜索记录的每个记录设置一个专用的下一个键锁。
如果我们定义一个表的外键约束,我们需要检查插入、更新或删除约束,并设置共享行级锁的记录,它看起来在检查constraint.innodb还设置这些锁在一个约束失效的情况下。