在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

如何进行MySQL INNODB存储引擎中各类型SQL加锁分析

107次阅读
没有评论

共计 2226 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章给大家介绍如何进行 MySQL INNODB 存储引擎中各类型 SQL 加锁分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

MYSQL5.6
事物隔离级别:RR
innodb_locks_unsafe_for_binlog=OFF

I
NSERT:

当前事务记为 TX1 
① 判断是否主键或者唯一建冲突

  YES,则请求 隐式锁 - 显式锁   X record lock –  S record lock
  1 记录已经存在于表中,返回 Duplicate 错误 (持有 S record lock 待事务(TX1)commit 或者 rollback 之后释放)
  2 记录还在其他的事务(TX2) 中处于未提交状态 (请求 S record lock),此时称之为 主键或者唯一建冲突的不确定状态(之后 update 也会出现这种情况)
  1. 若事务(TX2) 提交,则 TX1 返回 Duplicate 错误 (持有 S record lock 待事务(TX1)commit 或者 rollback 之后释放)
  2. 若事务(TX2) 回滚,则 TX1 获取 S record lock 成功,进而 跟 以下情况一致

  NO,请求 Itention INSERT LOCK(gap),其中 next_key lock ,gap lock , record lock(S X 都会) 会阻塞之
  1 若未被阻塞,获取到 Itention INSERT LOCK(gap),进而获取到 X record lock
  2 若被阻塞,则等待

PS : 其中 INSERT 语句会产生的锁类型有  INSERT Itention LOCK(gap) , X record lock , S record lock(主键冲突会将 X 转为 S 的申请) , IX(意向写锁 表层面的,这里分析都会忽略掉) , autoinc lock (自增锁,表级,之后会有分析)

UPDATE:

PK—– 主键
UK—– 唯一建
NK—– 非唯一索引
OTHER– 无索引字段

1. 条件为 PK
① update tb set pk=new where pk=old;
② update tb set uk=new where pk=old;
③ update tb set nk=xxx where pk=old;
④ update tb set other=xxx where pk=old;

pk 加上 X record lock 以及对应的 uk 加上 X record lock

对①操作而言,pk=old pk=new uk=tb(pk) 共 3 个 X record lock
对②操作而言,pk=old uk=new uk=tb(pk) 共 3 个 X record lock
对③操作而言,pk=old uk=tb(pk)   共 2 个 X record lock
对④操作而言,pk=old uk=tb(pk)   共 2 个 X record lock

2. 条件为 UK
① update tb set pk=new where uk=old;
② update tb set uk=new where uk=old;
③ update tb set nk=new where uk=old;
④ update tb set other=new where uk=old;
同上

3. 条件为 NK
① update tb set pk=new where nk=old;
② update tb set uk=new where nk=old;
③ update tb set nk=new where nk=old;
④ update tb set other=new where nk=old;

对①操作而言
1 nk 未匹配到记录,nk 加一个 gap lock , 开区间
2 nk 匹配到记录
1. 主键冲突(分确定状态和不确定状态),nk 加 X record LOCK,对应主键加 X record lock , 主键 S record lock,不对 唯一键加锁
2. 无主键冲突,nk 加 X record LOCK,pk=old pk=new 加 X record lock ,nk 两侧加 x gap lock , uk X record lock , uk S record lock , uk S gap lock
对②操作而言
1 nk 未匹配到记录,nk 加一个 gap lock,开区间
2 nk 匹配到记录  
1. 唯一建冲突(分确定状态和不确定状态),nk 加 X record LOCK,对应主键加 X record lock , 唯一键 S record lock
2. 无唯一建冲突,nk 加 X record lock,对应主键加 X record lock , uk=new 和 uk=old 加 X record lock
对③操作而言,
1 nk 未匹配到记录,nk 加一个 gap lock,开区间
2 nk 匹配到记录,nk 加一个 X record lock , nk 两侧加 gap lock 开区间,对应主键 加 X record lock
对④操作而言
1 nk 未匹配到记录 , nk 加一个 gap lock,开区间
2 nk 匹配到记录 ,  nk 加一个 X record lock,nk 两侧加 gap lock 开区间,对应主键 加 X record lock  

对于相同 gap , X gap lock 直接是不冲突的

4. 条件为 OTHER
① update tb set pk=new where other=old;
② update tb set uk=new where other=old;
③ update tb set nk=new where other=old;
④ update tb set other=new where other=old;

所有主键记录加 X record lock 以及 所有 gap 加 X gap lock。

关于如何进行 MySQL INNODB 存储引擎中各类型 SQL 加锁分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计2226字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国产精品入口免费视频 | 老熟女多次高潮露脸视频 | 国产精品v免费视频 | 日韩欧美在线视频 | 免费看日韩欧美一级毛片 | 午夜视频在线观看免费高清 | 一区二区三区不卡在线观看 | 在线播放亚洲视频 | 亚洲日韩欧美视频 | 亚洲欧美国产视频 | 国产丝袜在线精品丝袜 | www.日本视频 | 一区二区国产在线观看 | 风韵丰满熟妇啪啪区老老熟妇 | 麻豆视频网站 | 亚洲色偷拍区另类无码专区 | 亚洲国产系列久久精品99人人 | 天天摸天天做天天爽水多 | 一级特黄性色生活片一区二区 | 奥门一级片| 久久久久久久999 | 在线精品一区二区三区 | 国产美女做爰内谢免费图片 | 极品美女一级毛片免费 | 日韩av片无码一区二区不卡 | 体育生gay自慰网站 天干天干啦夜天干天2017 | 性色av无码不卡中文字幕 | 男女交性视频免费播放视频 | 医院人妻闷声隔着帘子被中出 | 九色免费视频 | 久久成人亚洲 | 天堂网最新版www | 综合图片亚洲网友自拍 | 国产在线无码精品电影网 | 欧美伊人久久久久久久久影院 | 国产精品嫩草影院在线播放 | 免费看www网站入口 免费看成年视频网页 | 国产精品久久久久久52avav | 精品一区二区三区免费播放 | 国产精品超清白人精品av | 国产永久在线观看 |