2025-05-17 05:00:01

重复键忽略?

我试着完成这个问题;我的标签字段被设置为唯一的,我只是想数据库忽略任何重复的标签。

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*'

当前回答

Mysql有这个方便的UPDATE INTO命令;)

看起来他们把它重命名为REPLACE

REPLACE的工作原理和INSERT完全一样, 除了表中的旧行 具有与a的新行相同的值 主键或唯一索引 旧行在新行之前被删除 插入

其他回答

建议不要使用INSERT IGNORE,因为它忽略了所有错误(即它是一个草率的全局忽略)。 相反,因为在你的例子中标签是唯一的键,使用:

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

重复键产生:

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

Mysql有这个方便的UPDATE INTO命令;)

看起来他们把它重命名为REPLACE

REPLACE的工作原理和INSERT完全一样, 除了表中的旧行 具有与a的新行相同的值 主键或唯一索引 旧行在新行之前被删除 插入