【发布时间】:2015-10-29 02:06:54
【问题描述】:
订单商品表
order_item_id
order_id
数量
单位价格
运费
业务 ID
工作流_id
Delivery_id
item_id
订单表
billing_address_id
shipping_address_id
付款方式
总价
运费
客户 ID
UPDATE `order_items` t1 INNER JOIN Orders t2 ON t2.order_id = t1.order_id SET t1.workflow_id = ? WHERE t1.order_item_id = ? and t2.order_id = ? and t2.customer_id = ? and t1.delivery_id = ?
UPDATE `order_items` t1 SET t1.workflow_id = ?
WHERE t1.order_item_id = ? and t1.business_id = ? and t1.delivery_id = ?
UPDATE `order_items` t1 INNER JOIN Orders t2 ON t2.order_id = t1.order_id SET t1.workflow_id = ? WHERE t1.order_item_id = ? and t2.order_id = ? and t1.delivery_id = ?"
这些查询是在我的 java rest 服务的不同场景中触发的。 (在任何时候,只会使用一个查询)。 以前我没有在我的更新 sql 中使用内连接,它运行良好。
现在我修改查询后,它会抛出以下异常并且查询被卡住并且一分钟没有返回。
java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)
更新
发生这种情况是因为我们忘记在 finally 块中再次将自动提交模式设置为 true。之后我们没有看到这个错误。
【问题讨论】:
标签: java mysql timeout deadlock