Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php/mysql防止在多个列上重复条目_Php_Mysql_Duplicates - Fatal编程技术网

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

php/mysql防止在多个列上重复条目,php,mysql,duplicates,Php,Mysql,Duplicates,我想提出一个标准实践,以防止任何表在重要的地方出现重复。在大多数情况下,重复项是变量的组合,而不是一个。我的主键只是每个字段的唯一ID,因此我无法使用它们。我所做的是首先查询表,然后如果所讨论的组合的行数为0,则进行插入。但是,我已经读过,应该可以在多个字段上设置一个唯一的键来强制唯一性。INSERT IGNORE听起来很有可能,但是,我需要在多个列上忽略它 例如,对于followers和followerd字段,表中可以有多个followers和followerd,但这两个字段只能是一个组合 有

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

例如,对于followers和followerd字段,表中可以有多个followers和followerd,但这两个字段只能是一个组合


有人能建议先在多个字段上创建唯一键,然后执行防止重复的SQL插入查询的语法吗?非常感谢。

您只需在这些列上创建一个多列索引并强制执行唯一性:请参阅位于的MySQL手册

例如,在具有列
id
(唯一主键)、
colA
colB
的表中,运行:

ALTER TABLE table ADD UNIQUE KEY (colA,colB)

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

为可使用的文本类型创建唯一索引

CREATE UNIQUE INDEX indexname ON `tablename` (columnname (100));
(100)这里columnname告诉mysql只检查前100个字节是否唯一,如果指定(4)作为长度,则两者都检查

hello
hello world
与索引相同(在索引树中两者实际上都是
hell
),mysql不允许将它们插入到表中


请参见此处

但这仅适用于小数据类型(最大1000字节)。如果需要为超过1000字节的列创建索引,例如VARCHAR(1001),则必须在列之后指定长度:
。。。键(可乐(长度),…
喜欢长度的想法,以前不知道。谢谢!