MySQL插入忽略不工作
这是我的表格和一些样本数据MySQL插入忽略不工作,mysql,insert,duplicates,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') 当它应该忽略第二个值对(2494)时,它会插入这两行 没有定义索引,这些列都不是主列 我不知道什么?如果没有主键,就不能忽略重复键。您应该始终设置一个主键,所以请这样做-如果您希望有
a_id | b_id
------------
1 225
2 494
3 589
当我运行此查询时
INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
当它应该忽略第二个值对(2494)时,它会插入这两行
没有定义索引,这些列都不是主列
我不知道什么?如果没有主键,就不能忽略重复键。您应该始终设置一个主键,所以请这样做-如果您希望有不应重复的其他列,请将它们设置为“唯一”。如果您没有设置一个
唯一的标准或设置主键,MySql将不会知道您的新条目是重复的。来自:
如果使用IGNORE关键字,则执行INSERT语句时发生的错误将改为警告。例如,在不忽略的情况下,复制表中现有唯一索引或主键值的行将导致重复键错误,语句将中止。使用IGNORE时,仍不会插入行,但不会发出错误
(我的斜体)
您的行没有复制“现有唯一索引或主键值”,因为您既没有主键也没有任何唯一约束
如您在一条注释中所述,如果您不希望两个字段都是唯一的,但确实希望组合是唯一的,则需要在两列之间使用复合主键(首先消除任何重复项):
如果我理解正确,那么在运行insert命令后,您的表如下所示
1 225
2 494
3 589
4 230
2 494
如果是这样,那么答案是因为您的表设计允许重复
如果要防止插入第二条记录,则需要将a_id列定义为主键或唯一索引。如果这样做,则insert ignore语句将按预期工作,即插入记录,忽略错误,例如尝试添加重复记录。Hmm。。。那么,如何在不需要主键的情况下忽略重复的行呢?我不想将特定列设置为唯一列。我希望两列的组合是唯一的。例如,可以有一行(3589)和一行(3330),但不能有两行(3589),因此需要使用多列唯一约束。示例已由paxdiablo提供。这将满足您的要求。如果你想让MySQL处理你的忽略请求,你必须有一个唯一的约束。我有主键autoincrement,但仍然不适用于我
1 225
2 494
3 589
4 230
2 494