有没有办法用某些列的复合键INSERT IGNORE INTO?
INSERT IGNORE INTO `table1` WHERE `col_a` = 1 AND `col_b` = 2;
其中有col_a_col_b的复合键。
所以基本上它会忽略某些行组合的重复?
现在我已经制作了一个PHP函数来在插入之前删除重复项,但它非常慢。我想知道SQL是否可以单独完成它?
答案 0 :(得分:2)
这是你在找什么?
INSERT IGNORE INTO table1(col_a, col_b)
select 1, 2;
每次运行时都会插入值对(1,2)。如果您只希望对存在一次,那么您需要一个唯一约束。最简单的方法是使用索引:
create unique index table1(col_a, col_b);
然后上面的代码将第一次运行,但后续插入失败。顺便说一下,对于这个功能,我更喜欢:
INSERT INTO table1(col_a, col_b)
select 1, 2
on duplicate key update col_a = values(col_a);
insert ignore
忽略所有错误。这只会忽略由重复引起的错误 - 不会发生任何事情,也不会返回任何错误。