2011-08-26 259 views
5

我将一些数据插入表中,但偶尔会与表中的其他数据(即它具有相同的主键)冲突。
我希望能够覆盖这些数据,如果它在那里,而不是让MySQL发送一条错误消息,说他们是一个重复的主键。我知道我可以在手边删除这些值,但这需要一些大的查询。
是否有可能以某种方式覆盖这些,并禁止任何警告,或者我被迫删除这些值。插入到mysql表中并覆盖任何当前数据

回答

13

只是一个小的cheatsheet
Mysql的有3级不同的场景在处理主键重复:如果你想
...

2

你可以在MySQL中使用REPLACE INTO来做到这一点。

REPLACE INTO table 
SET name = 'Treffynnon' 
+3

我喜欢无耻的自我推销。 –

3

MySQL有一个 “INSERT ... ON DUPLICATE KEY UPDATE” 命令。 你可以在这里找到:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

INSERT INTO `table` VALUES ('a', 'b') ON DUPLICATE KEY UPDATE `field1`='a', `field2`='b' 
+2

'set field = VALUES(field)'是一个更好的选择 - 节省您在查询中使用数据两次。 values()函数会将它从语句的插入部分拉出来,因此您的数据只会进入查询字符串一次。 –