我想提出一个标准做法,以防止任何表在重要的地方重复。在大多数情况下,重复是变量的组合而不是一个。我的主键只是每个字段的唯一ID,所以我不能使用它们。我一直在做的是首先查询表,然后如果所讨论的组合的行数是0,则进行插入。但是,我已经读过,应该可以在多个字段上设置唯一键以强制实现唯一性。 INSERT IGNORE听起来很有可能,但是,我需要忽略多个列。
例如,对于字段关注者和关注者,表格中可以有多个关注者和关注者,但应该只是两者的一种组合。
任何人都可以建议语法首先在多个字段上创建唯一键,然后执行防止欺骗的SQL插入查询吗?非常感谢。
答案 0 :(得分:14)
您可以在这些列上创建多列索引并强制实现唯一性:请参阅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)
就是这样:导致这两个列中的重复条目的任何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