使用复合键忽略插入时的重复项

时间:2014-07-13 16:28:45

标签: php mysql sql

有没有办法用某些列的复合键INSERT IGNORE INTO?

INSERT IGNORE INTO `table1` WHERE `col_a` = 1 AND `col_b` = 2;

其中有col_a_col_b的复合键。

所以基本上它会忽略某些行组合的重复?

现在我已经制作了一个PHP函数来在插入之前删除重复项,但它非常慢。我想知道SQL是否可以单独完成它?

1 个答案:

答案 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忽略所有错误。这只会忽略由重复引起的错误 - 不会发生任何事情,也不会返回任何错误。