MySQL - 在不使用唯一索引的情况下防止多个insert语句的重复

时间:2014-09-22 16:13:51

标签: mysql sql

我需要做一个多插入语句,我需要防止重复行而不使用主键或任何其他唯一索引。要插入的行需要检查两个(或更多)列是否相等,然后如果所有列都匹配表中已有的至少一行,则阻止插入。理想的解决方案是只使用一个MySQL插入语句。

例如,有一个表已插入一行:

INSERT INTO `table1` (`a`, `b`, `c`)
  VALUES ('1', '2', 'foo');

这是仍然需要插入的数据:

INSERT INTO `table1` (`a`, `b`, `c`)
  VALUES ('A', 'B', 'C'), ('1', '2', 'bar'), ('D', 'E', 'F');

如何检查a和b列是否重复,以便(''','B','C')和''''('A','B','C')和'' D','E','F')是否插入?

2 个答案:

答案 0 :(得分:1)

您可以使用insert . . . select

INSERT INTO `table1` (`a`, `b`, `c`)
    select t.*
    from (select 'a' as a, 'b' as b, 'c' as c union all
          select '1', '2', 'bar' union all
          select 'd', 'e', 'f'
         ) t
    where not exists (select 1 from table1 t1 where t1.a = t.a and t1.b = t.b);

答案 1 :(得分:0)

唯一的方法是使用值检查行的存在。 最好创建一个主键,以便可以使用INSERT IGNORE

if not exists ( select * from table1 where a = '1' and b ='2' and c ='bar')
   insert into table1 ('1','2', 'bar')