关于多线程下mysql出现Deadlock found when trying to get lock

k10509806 2014-11-08 11:40:00
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction

有100个账号,同时开启30个线程同步线上订单数据。

一个事务里,执行下面两个操作。

// 先把以前的记录删掉,根据索引 order_id
orderDao.batchDeleteOrder(alibabaOrders);

// 保存最新的记录
orderDao.batchCreateOrder(alibabaOrders);

如果我把索引idx_t_order_order_id删掉就不会出现这种错误。

请问怎么解决呢?或者建议下,我这样同步数据的方式是不是不对?
...全文
1074 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
bglmmz 2016-02-16
  • 打赏
  • 举报
回复
我也碰到和楼主类似的问题。 我有个表,比如是订单-物品表,里面保存每个订单的所有物品清单 字段有: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。 同时,我这个事物所在的业务方法,是多线程并发进行的。就是有并发的线程,来更新不同的订单(的物品清单) 不知道如何解决。。。。

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧