• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql innodb行锁解锁后出现1213死表现象Deadlock found when解_MySQL

mysql 搞代码 4年前 (2022-01-09) 14次浏览 已收录 0个评论

gaodaima.com

mysql innodb行锁解锁后出现1213死表现象Deadlock found when解决

出现这个原因要记住一点就是:innodb的行锁 和解锁都是针对主键索引的。如果查询时根据索引锁表,但更新时却不是通过主键更新,那么等待的解锁查询的进程将会报1213错误,程序里有可能返回一个null值

实例:

table

soldgoods (表名)

soldgoodsID 索引

productid

businessid

开启线程A

执行:

set autocommit=0;

select businessid from soldgoods where soldgoodsID = 'ac63837c76222e4a5419e本文来源gaodai$ma#com搞$代*码*网2529d775ae4' for UPDATE;

查询得过结果

开启线程B

执行:

set autocommit=0;

select businessid from soldgoods where soldgoodsID = 'ac63837c76222e4a5419e2529d775ae4' for UPDATE;

查询等待解锁

这个时候在线程A中执行:

update soldgoods set productid = 2 where businessid = '0a527df4763c3dc71cbafebec5a8d787'

不是根据主键而去更新锁表的值

线程B会出现:

[Err] 1213 – Deadlock found when trying to get lock; try restarting transaction

如果将最后线程A中执行的语句改变:

update soldgoods set productid = 2 where soldgoodsID = 'ac63837c76222e4a5419e2529d775ae4'

根据索引修改值

然后

commit;

提交事务。线程B就能顺利得到查询值了

gaodaima.com


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql innodb行锁解锁后出现1213死表现象Deadlock found when解_MySQL

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址