在MySQL中进行DELETING和INSERTING时出现重复键错误

时间:2014-09-04 01:26:09

标签: php mysql performance

我正在运行一个中型系统(PHP + MySQL),我有一个表存储所有用户的朋友(这些信息来自Facebook)。该表现在有大约100万行。

每次用户登录时,系统都会从此表中删除所有用户的朋友,然后使用从Facebook下载的数据再次插入,所以编码如下:

1) Run Facebook Query and store results in an object.

2) If query wasn`t successful, end program.

3) DELETE FROM UserFriends WHERE idUser = $idUser

4) INSERT INTO UserFriends (idUser, FriendFacebookId) VALUES
($idUser, $objFB[x]),
($idUser, $objFB[x2]),
($idUser, $objFB[x3])
...

*它在循环内生成查询,因此它只在一个查询中插入所有行)

运行INSERT语句的有时(2000年~1)会返回以下错误:

1062 : Duplicate Entry for '2030-0202001910' for key 'PRIMARY'

'2030-0202001910'是用户ID和FriendFacebookID ......它始终是INSERT语句中的第一组数据。

所以问题是:我刚刚删除了该用户的所有内容,该用户应该为该表空,但是当我尝试为该用户插入数据时,它会返回此消息。为什么会发生这种情况,我该如何避免呢?

请注意:这个程序每小时运行数百次,错误只发生几次......如果同一个用户尝试再次登录,程序就像预期的那样...所以我想这可以是DELETE命令和数据之间的一些“延迟”已从表中删除......我不知道。

有用信息:表是InnoDB,我没有使用交易。

1 个答案:

答案 0 :(得分:0)

尝试此而不是插入:INSERT IGNORE

这意味着“忽略重复”'所以它永远不会产生造成碰撞的可能性。

看看它是否适合你。

你也可以使用INSERT ... ON DUPLICATE KEY UPDATE

...或简单地说:REPLACE

而不是普通的INSERT命令

相关问题