重复键忽略?

重复键忽略?

问题描述:

伙计们我试图完成这个查询 - >我的标记字段设置为UNIQUE,我只想让数据库忽略任何重复的标记。重复键忽略?

INSERT INTO table_tags (tag) VALUES ('tag_a'),('tab_b'),('tag_c') 
ON DUPLICATE KEY IGNORE '*the offending tag and carry on*' 

,甚至这是可以接受的

INSERT INTO table_tags (tag) VALUES ('tag_a'),('tab_b'),('tag_c') 
ON DUPLICATE KEY UPDATE '*the offending tag and carry on*' 
+0

参见:[“INSERT IGNORE”vs“INSERT ... ON DUPLICATE KEY UPDATE”](http://*.com/q/548541/1402846)。 – Pang 2013-04-07 11:17:18

不会使用建议之前被删除插入IGNORE,因为它忽略所有错误(即它是一个马虎的全局忽略)。 相反,因为在你的例子tag是唯一键,使用:

INSERT INTO table_tags (tag) VALUES ('tag_a'),('tab_b'),('tag_c') ON DUPLICATE KEY UPDATE tag=tag; 

上重复键生成:

查询OK,0行受到影响(0.07秒)

+3

对,很好的回答。插入IGNORE是个坏消息! – Boundless 2012-09-11 20:36:20

+1

@Derrick你会考虑为未来的搜索者改变这个接受的答案吗?对于那些提到这个问题的人来说,最好有更安全的解决方案。 – damianb 2013-03-14 20:02:20

+1

@Boundless它确实取决于,例如,我有一个表包含数据库中特定数据条目的类别。在对这些类别进行更改时,我会使用包含所有这些类别的INSERT IGNORE,而不是测试来查看这些类别之间的差异。 – Jay 2013-09-25 16:35:36

Mysql已经这个方便UPDATE INTO命令;)

编辑看起来他们给它改名,以取代

更换工程完全像INSERT, 除了th在如果旧行的表 具有相同的值作为一个 主键或唯一索引的新行中, 旧行的新行 插入

+0

Dood我会需要你详细说明那个? – 2010-03-02 21:19:30

+0

感谢您的帮助和时间,Ivan Nevostruev解决方案似乎为我做了窍门 – 2010-03-02 21:27:00

+44

替换将替换之前删除冲突的行。如果您有外键,指向您遇到麻烦的已删除行。 – nakhli 2012-08-07 20:53:46