php / mysql防止多列上的重复条目

时间:2012-04-30 19:56:57

标签: php mysql duplicates

我想提出一个标准做法,以防止任何表在重要的地方重复。在大多数情况下,重复是变量的组合而不是一个。我的主键只是每个字段的唯一ID,所以我不能使用它们。我一直在做的是首先查询表,然后如果所讨论的组合的行数是0,则进行插入。但是,我已经读过,应该可以在多个字段上设置唯一键以强制实现唯一性。 INSERT IGNORE听起来很有可能,但是,我需要忽略多个列。

例如,对于字段关注者和关注者,表格中可以有多个关注者和关注者,但应该只是两者的一种组合。

任何人都可以建议语法首先在多个字段上创建唯一键,然后执行防止欺骗的SQL插入查询吗?非常感谢。

2 个答案:

答案 0 :(得分:14)

您可以在这些列上创建多列索引并强制实现唯一性:请参阅http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html上的MySQL手册。

例如,在包含id列(唯一主键),colAcolB的表格中,您运行:

ALTER TABLE table ADD UNIQUE KEY (colA,colB)

就是这样:导致这两个列中的重复条目的任何INSERT现在将返回MySQL错误而不是通过。如果您使用INSERT IGNORE,如果执行它将违反此唯一约束,则不会抛出MySQL错误,并且您的INSERT语句将被悄然忽略。

答案 1 :(得分:3)

要为文本类型创建唯一索引,您可以使用

CREATE UNIQUE INDEX indexname ON `tablename` (columnname (100));

(100)这里在columnname之后告诉mysql只检查前100个字节是唯一的,如果你指定(4)作为长度那么两个

hello
hello world

与索引相同(索引树中实际都是hell),mysql不允许将它们插入表中。

请参阅此处http://dev.mysql.com/doc/refman/5.0/en/create-index.html