如何避免死锁情况插入到复制更新时选择?

时间:2015-11-18 06:53:09

标签: c++ mysql

使用批量插入时,我在桌面上遇到死锁问题,查询在

下面
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列上建立索引。

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

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

我认为它可以解决您在避免死锁条件方面的问题