MySQL INSERT IGNORE无法正常工作

时间:2010-06-14 06:32:34

标签: mysql insert duplicates

这是我的表格,其中包含一些示例数据

a_id | b_id
------------
  1    225
  2    494
  3    589

当我运行此查询时

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')

当它应该忽略第二个值对时,它会插入这些行(2,494)

没有定义索引,这些列都不是主要的。

我不知道什么?

4 个答案:

答案 0 :(得分:13)

来自docs

  

如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告。例如,如果没有IGNORE,复制表中现有UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,并且语句将中止。使用IGNORE时,仍未插入行,但未发出错误。

(我的斜体)。

您的行没有复制“现有的UNIQUE索引或PRIMARY KEY值”,因为您没有主键也没有任何唯一约束。


如果正如您在其中一条评论中提到的那样,您希望这两个字段都不是唯一的,但您希望组合是唯一的,那么您需要跨两列的复合主键(摆脱它)任何重复的第一个):

alter table MYTABLE add primary key (a_id,b_id)

答案 1 :(得分:3)

如果您没有设置UNIQUE条件或设置PRIMARY KEY,MySql将不会知道您的新条目是重复的。

答案 2 :(得分:1)

如果没有主键,则无法忽略重复键。你应该总是设置一个主键,所以请这样做 - 如果你想要有不应该重复的其他列,请将它们设置为“唯一”。

答案 3 :(得分:0)

如果我理解正确,在运行insert命令后,您的表就像这样

1   225
2   494
3   589
4   230
2   494

如果是这样,那么答案是因为你的表设计允许重复。

如果您希望它阻止插入第二条记录,则需要将a_id列定义为主键或唯一索引。如果这样做,那么insert ignore语句将按预期工作,即插入记录,忽略错误,例如尝试添加重复记录。

相关问题