我有一个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=?
请记住,您必须再次在引用的数组中添加值以解决额外的问号。
答案 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';