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

use*_*310 2 php mysql duplicates

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

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

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

Daa*_*aan 15

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

例如,在列的表id(唯一的主键),colA而且colB,我们可以运行:

ALTER TABLE table ADD UNIQUE KEY (colA,colB)
Run Code Online (Sandbox Code Playgroud)

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

  • 但是,这仅适用于小数据类型(最多1000个字节).如果需要为超过1000个字节的列创建索引,例如VARCHAR(1001),则必须在列之后指定长度:`... KEY(colA(length),...` (2认同)