使用批量插入时,我在表上面临死锁问题,查询如下
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列上具有索引。
有人可以帮我吗?
最佳答案
您可以将其分为两个查询,以避免在单个查询中插入和选择同一张表。
我认为这可以解决避免死锁情况的问题