使用批量插入时,我在表上面临死锁问题,查询如下

INSERT INTO registrationupdates (refreshtime,firstseentime,userdevice,isexist,userpart,expires,ipaddress,contacturi,deviceid)
SELECT refreshtime,firstseentime,userdevice,isexist,userpart,expires,ipaddress,contacturi,(SELECT IFNULL(id,0) FROM devicedetails WHERE deviceip LIKE CONCAT('%',registrarip , '%'))
FROM register_temp_table  WHERE isexist=1  ON DUPLICATE KEY UPDATE `refreshtime`=VALUES(refreshtime),`firstseentime`=VALUES(firstseentime),`userdevice`=VALUES(userdevice),`isexist`=VALUES(isexist);


正在收到以下错误消息

Deadlock found when trying to get lock; try restarting transaction


“ contacturi”是唯一键,在registrationupdates表的userpart列上具有索引。

有人可以帮我吗?

最佳答案

您可以将其分为两个查询,以避免在单个查询中插入和选择同一张表。

我认为这可以解决避免死锁情况的问题

09-08 11:35