mysql自动防止冗余插入

时间:2010-12-21 03:06:25

标签: mysql insert

我有一张像

这样的表格
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中执行此操作的最佳方法是什么?

(*想知道why is there a relationId member in this table?

2 个答案:

答案 0 :(得分:1)

使用

INSERT IGNORE ...

并创建唯一索引/主键

  

如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告。例如,如果没有IGNORE,则复制表中现有UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,并且语句将中止。使用IGNORE时,仍未插入行,但未发出错误。

(c)http://dev.mysql.com/doc/refman/5.1/en/insert.html

答案 1 :(得分:1)

围绕父列和子列创建复合唯一键。然后发出这样的查询:

insert ignore into adjacencies( parent, child, pathLen )
select a, b, c from something where condition ;

IGNORE子句会将重复键错误转换为警告。