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