我想提出一种标准做法,以防止任何表在重要的地方重复。在大多数情况下,重复项是变量的组合而不是一个。我的主键只是每个字段的唯一ID,因此我无法使用它们。我一直在做的是先查询表,然后查询所要组合的行数是否为0,然后进行插入。但是,我已经读过,应该有可能在多个字段上设置唯一键以强制唯一性。INSERT IGNORE听起来很可能,但是,我需要在多个列上忽略它。
例如,对于字段关注者和关注对象,一个表中可以有多个关注者和关注对象,但只能是两者的一个组合。
谁能建议语法先在多个字段上创建唯一键,然后再执行防止插入重复的SQL插入查询?非常感谢。
您可以在这些列上简单地创建一个多列索引并强制唯一性:请参见MySQL手册,网址为http://dev.mysql.com/doc/refman/5.0/en/multiple-column- indexes.html。
例如,在具有列id(唯一主键)colA和的表中colB,运行:
id
colA
colB
ALTER TABLE table ADD UNIQUE KEY (colA,colB)
就是这样:在这两个列中导致重复条目的所有INSERT现在都将返回MySQL错误,而不是进行遍历。如果使用INSERT IGNORE,则如果执行MySQL错误会违反此唯一约束,则不会引发MySQL错误,并且您的INSERT语句将被忽略。
INSERT IGNORE
INSERT