3

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

例如,对于字段 Followers 和 Followed,一个表中可以有多个 Followers 和 Follows,但只能是两者的一种组合。

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

4

2 回答 2

17

您可以简单地在这些列上创建一个多列索引并强制唯一性:请参阅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语句将被悄悄地忽略。

于 2012-04-30T20:03:10.917 回答
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

于 2012-04-30T20:11:57.880 回答