2 bglmmz bglmmz 于 2016.02.16 18:17 提问

请教一个mysql批量更新时的deadlock问题?

数据是mysql 5.6 表引擎是innoDB,DAO是mybatis3

有个表,比如是订单-物品表,里面保存每个订单的所有物品清单
字段有:record_id(记录id,自增长),order_id(订单id),good_id(物品id)等其他字段..

有个数据同步的业务场景
需要在一个事务里
先根据order_id做删除操作,delete from xxx where order_id=xx
然后再批量增加订单-物品清单insert into xxx () values(),(),()
结果发现,经常在insert into 这发生deadlock。

同时,我这个事物所在的业务方法,是多线程并发进行的。就是有并发的线程,来更新不同的订单(的物品清单)

不知道如何解决。。。。

1个回答

Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.16 20:36
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
MySQL更新死锁问题
就是如何利用乐观锁来解决并发问题,但是项目推到线上后就报错了,如下: -08-13 15:12:44 [ERROR] com.zhubajie.coupon.app.CouponReceiveAppServiceImpl {CouponReceiveAppServiceImpl.java:50} - ### Error updating database. Cause: com.my
mysql批量更新update操作,导致锁表
sql如下: update pay_trans set return_state = 1 WHERE order_id = #{orderId} and user_id = #{userId} 批量执行此条sql时,导致数据表被锁,所有交易异常。 经排查where条件order_id and user_...
mysql更新死锁问题
mysql更新死锁问题 问题现象 同一时间点,一个商户下多个模板(模板id不同)同时更新; 券模板操作流水更新时发生死锁,报 Deadlock found when trying to get lock; try restarting transaction 错误 相关业务表信息 表:log_xx索引信息:log_no:分库分表全局唯一uk; merchant
MyBatis中进行批量更新(MySQL数据库)
一、简介在程序开发过程中,往往会遇到需要更新一批数据(批量更新)的情况,这种情况通常有两种方法进行解决。这两种方法各有优点与缺点,这就需要我们根据实际业务需要进行取舍。二、操作1、逐条更新(不推荐)直接在程序上使用循环对数据库进行数据更新,使用这样的方式是最简单、最不容易出错的方式。也不会出现因为一条数据更新失败,而导致全部数据更新失败。执行Java代码如下: updateBatch(List<De
总结线上遇到的MySQL死锁问题
线上遇到了MySQL死锁的相关问题,需要查看MySQL出现的Deadlock日志,可以通过执行:   show engine innodb status     来查看innodb类型数据库的状态,查找laster detected deadlock部分,可以看到最近造成死锁的两条sql   ------------------------ LATEST DETECTED
MySql数据库死锁deadlock
今天在项目性能测试中遇到个Mysql的DeadLock的问题。 后来根据数据库日子查找原因,大概模拟一下发生的情形。   数据库用的innoDB。 InnoDB行锁是通过给索引上的索引项加锁来实现的,InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁! 下面例子中id是主键,操作都走索引,锁都是row lock。
mysql批量更新和批量更新同一字段为不同值
mysql批量更新和批量更新同一字段为不同值 1.MySQL更新一条记录语句: UPDATE user SET name='zhangsan' WHERE id=1 2.更新同一条字段为相同值 UPDATE user SET name='zhangsan' WHERE id in (1,2,3); 3.更新不同记录为不同值(批量更新) UPDATE user SET nam
数据库死锁导致分布事务中大批量更新数据库不成功
http://www.jianshu.com/p/4b098dd4b596 1 问题描述 未签收的订单十五天之后自动签收:总共2个步骤: step1 在乐购系统中批量更新未签收订单的状态,step2: 通过RPC修改订单系统的订单状态, step1和step2放到一个事务中。然后发现step2 订单DB状态修改成功,但是step1 乐购db的订单状态并未修改。 2 排查过程
Deadlock的一些总结(死锁分析及处理)
1.1.1 摘要       在系统设计过程中,系统的稳定性、响应速度和读写速度至关重要,就像12306.cn那样,当然我们可以通过提高系统并发能力来提高系统性能总体性能,但在并发作用下也会出现一些问题,例如死锁。      今天的博文将着重介绍死锁的原因和解决方法。 1.1.2 正文       定义:       死锁是由于并发进程只能按互斥方式访问临界资源等多种因素引起的,并且是一
C3P0连接池启动时 APPARENT DEADLOCK!!! 错误
在Windows平台下运行正常的应用部署到Linux服务器上之后,一直报错:com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@bbd1b —APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks! 查了好多论坛,发现