SQL找到重复键后,替换整个条目

时间:2011-05-13 13:34:17

标签: mysql duplicates

我有一个MySQL的插入查询,如下所示:

INSERT INTO table (foo, bar, fooo, baar, etc) VALUES (?,?,?,?,?)

它在脚本中用于迁移某些列并且不断遇到重复的主键。 (旧数据库非常糟糕,维护得很差)。

有没有办法我可以告诉它用当前的值替换整个违规行,完全抛弃旧的东西?我知道有一个ON DUPLICATE KEY UPDATE命令,但我不知道它是否会对我有所帮助,因为我已经看到它用于增量。

答案:INSERT INTO table (foo, bar, fooo, baar, etc) VALUES (?,?,?,?,?) ON DUPLICATE KEY UPDATE foo=?, bar=?, fooo=?, baar=?, etc=?

请记住,您必须再次在引用的数组中添加值以解决额外的问号。

2 个答案:

答案 0 :(得分:2)

on duplicate key update应该有效,replace声明应该有效。

答案 1 :(得分:1)

来自MySQL手册:

  

如果指定ON DUPLICATE KEY   UPDATE,并插入一行   会导致a中的重复值   UNIQUE索引或PRIMARY KEY,UPDATE   执行旧行。

你说的是什么:

  

有没有办法告诉它   用。替换整个违规行   当前的价值折腾了旧的   完全是什么东西?

结论:你为什么不试试呢?它似乎完全符合您的要求。


编辑:由于您没有提供任何您尝试做的示例,我将使用MySQL网站上的一些。

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

或者如果你想要更多与现实世界相关的东西:

INSERT INTO表(int_field,str_field,float_field)VALUES(15,'some string','1.22') ON DUPLICATE KEY UPDATE int_field = 15,str_field ='some_string',float_field ='1.22';