加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql应用mysql之innodb的锁分类介绍

发布时间:2020-12-12 02:30:53 所属栏目:MySql教程 来源:网络整理
导读:《Mysql应用mysql之innodb的锁分类介绍》要点: 本文介绍了Mysql应用mysql之innodb的锁分类介绍,希望对您有用。如果有疑问,可以联系我们。 一、innodb行锁分类 record lock:记录锁,也就是仅仅锁着单独的一行 gap lock:区间锁,仅仅锁住一个区间(注意这里

《Mysql应用mysql之innodb的锁分类介绍》要点:
本文介绍了Mysql应用mysql之innodb的锁分类介绍,希望对您有用。如果有疑问,可以联系我们。

一、innodb行锁分类

record lock:记录锁,也就是仅仅锁着单独的一行
gap lock:区间锁,仅仅锁住一个区间(注意这里的区间都是开区间,也就是不包括边界值.
next-key lock:record lock+gap lock,所以next-key lock也就半开半闭区间,且是下界开,上界闭. www.aspzz.cn
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应用mysql之innodb的锁分类介绍》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读