文档章节

mysql 死锁 Deadlock found when trying to get lock; t

vshcxl
 vshcxl
发布于 2016/07/13 13:48
字数 286
阅读 2764
收藏 0

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

本文转载自:http://hehaibo.iteye.com/blog/1868075

共有 人打赏支持
vshcxl
粉丝 23
博文 283
码字总数 34755
作品 0
浦东
高级程序员
私信 提问
MySQL 出现死锁的分析和解决方案

异常日志 ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transactio......

黄途文
2015/07/16
0
3
MySQL死锁分析

熟悉或者了解数据库的朋友都知道锁的概念,这里不做过多的解析!锁的种类有很多,不同数据库的锁管理方式也不同。这里主要谈下MySQL innodb引擎下的死锁。 死锁通俗的来讲就是2个事务相互请求...

rewiner22
2017/02/06
0
0
集群下acquireNextTrigger报死锁异常

org.quartz.JobPersistenceException: Couldn't acquire next trigger: Deadlock found when trying to get lock; try restarting transaction at org.quartz.impl.jdbcjobstore.JobStoreSup......

piaoling19
2016/04/03
702
1
jfinal并发的事务死锁问题

@jfinal 有一个controller,请求方法test,test加了事务@Before(TxSerializable.class) 有TableA,字段count 部署一个tomcat,测试500个并发,60秒,这个写法测试没有问题 如果部署3个tomca...

jeffw
2015/02/06
1K
2
请教Activiti 并发启动流程死锁问题

1. 多线程并发启动 : runtimeService.startProcessInstanceByKey(processDefinitionKey,variables); 2. 版本6.0.0 或 7.0.0.Beta4 3. 数据库:mysql 5.7.18 导致: Deadlock found when tr......

鲁路修-兰佩路基
2018/12/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Jmeter参数的AES加密使用

在Jmeter日常实践中,大家应该都遇到过接口传参需要加密的情况。以登陆为例,用户名和密码一般都需要进行加密传输,在服务端再进行解密,这样安全系数会更高,但在使用jmeter进行接口测试的时...

程序猿拿Q
8分钟前
0
0
MYSQL 日期函数 Date and Time Functions

Table 12.13 Date and Time Functions Name Description ADDDATE() Add time values (intervals) to a date value ADDTIME() Add time CONVERT_TZ() Convert from one time zone to another ......

_liucui_
14分钟前
0
0
Android代码混淆ProGuard工作原理简介

ProGuard能够对Java类中的代码进行压缩(Shrink),优化(Optimize),混淆(Obfuscate),预检(Preveirfy)。    1. 压缩(Shrink): 在压缩处理这一步中,用于检测和删除没有使用的类,字段...

SuShine
17分钟前
0
0
Idea 2018激活

教程地址: https://www.52pojie.cn/thread-781394-1-1.html 亲测可用

一个不正经的程序员
22分钟前
0
0
Android组件化开发实践和案例分享

目录介绍 1.为什么要组件化 1.1 为什么要组件化 1.2 现阶段遇到的问题 2.组件化的概念 2.1 什么是组件化 2.2 区分模块化与组件化 2.3 组件化优势好处 2.4 区分组件化和插件化 2.5 applicatio...

潇湘剑雨
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部