我有一张像
这样的表格create table adjacencies(
relationId int not null primary key auto_increment,
parent int not null,
child int not null,
pathLen int not null
) ;
我正在插入大量的条目,比如
insert into adjacencies( parent, child, pathLen )
select a, b, c from something where condition ;
因此,有时当我运行插入查询时,(父,子)关系可能已存在并且可能重复。坏消息。
我不想在(parent,child)上创建主键,因为这会导致硬故障(查询失败)。
如果尝试插入表中已存在的(父,子)对,则我想要的是软失败(即只有该对被忽略,查询的其余部分正常进行。
在MySQL中执行此操作的最佳方法是什么?
答案 0 :(得分:1)
使用
INSERT IGNORE ...
并创建唯一索引/主键
如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告。例如,如果没有IGNORE,则复制表中现有UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,并且语句将中止。使用IGNORE时,仍未插入行,但未发出错误。
答案 1 :(得分:1)
围绕父列和子列创建复合唯一键。然后发出这样的查询:
insert ignore into adjacencies( parent, child, pathLen )
select a, b, c from something where condition ;
IGNORE
子句会将重复键错误转换为警告。