Deadlock found when trying to get lock; try restarting transaction
1213 - Deadlock found when trying to get lock; try restarting transaction
出现这个原因要记住一点就是:innodb的行锁 和解锁都是针对主键索引的。如果查询时根据索引锁表,但更新时却不是通过主键更新,
那么等待的解锁查询的进程将会报1213错误,程序里有可能返回一个null值
实例:
table
soldgoods (表名)
soldgoodsID 索引
productid
businessid
开启线程A
执行:
set autocommit=0;
select businessid from soldgoods where soldgoodsID = 'ac63837c76222e4a5419e2529d775ae4' 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就能顺利得到查询值了
转载自:http://blog.sina.com.cn/s/blog_4acbd39c01014gsq.html
相关推荐
主要给大家介绍了关于mysql出现报错:Deadlock found when trying to get lock; try restarting transaction的解决方法,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看...
服务器运行一天后,就开始频繁报错:Deadlock found when trying to get to lock; try restarting transaction. 死锁的头号原因是外键未加索引,第二号原因是位图索引遭到并发更改;
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction 由于开发任务紧急,只是暂时规避了一下,但是对触发死锁的原因和相关原理不甚了解,于是这几天一直在查阅相关资料,总结...
避免或最小化mysql死锁deadlock一些方法.docx
在update表的时候出现DeadlockLoserDataAccessException异常 (Deadlock found when trying to get lock; try restarting transaction…)。 问题分析 这个异常并不会影响用户使用,因为数据库遇到死锁会自动回滚并重...
摘要 今天来分享一下我在线上环境遇到的有关...Deadlock found when trying to get lock; try restarting transaction 定位问题 既然知道了是死锁造成的问题,那怎么定位问题呢?我们可以使用show engine innodb s
mysql死锁解决
mysql死锁检测机制初探1
mysql死锁分析
这六个 MySQL 死锁案例,能让你理解死锁的原因!.doc
1.1 一个不可思议的死锁 1 1.1.1 初步分析 3 1.2 如何阅读死锁日志 3 2.1 Delete操作的加锁逻辑 4 2.2 死锁预防策略 5 2.3
NULL 博文链接:https://fs20041242.iteye.com/blog/1732749
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; show status like ‘%lock%’等语句排查详解
docker mysql_一些常见的mysql死锁案例_笔记记录
前段时间遇到了一个Mysql 死锁相关的问题,整理一下。 问题描述:Mysql 的修改语句似乎都没有生效,同时使用Mysql GUI 工具编辑字段的值时会弹出异常。 什么是死锁 在解决Mysql 死锁的问题之前,还是先来了解一下...
在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严 重影响应用的正常执行。 在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁...
DeadLock查找死锁的位置及解决 DeadLock查找死锁的位置及解决