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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
MySQL-插入而不复制行(不通知PK)_Mysql_Database_Duplicates - Fatal编程技术网

MySQL-插入而不复制行(不通知PK)

MySQL-插入而不复制行(不通知PK),mysql,database,duplicates,Mysql,Database,Duplicates,我必须在mysql表中插入一些值,但前提是没有其他(几乎)相等的行,例如: TABLE T KEY | COL1 | COL2 1 | abc | 123 2 | def | 456 键列使用自动递增,我不会在语句中通知它,如下所示: INSERT INTO T (COL1, COL2) VALUES (abc, 123) 上面的语句具有与第一行相同的值。如果行是这样的重复行,我如何通知mysql我不想插入 我在谷歌上搜索了一些解决方案,发现INSERT IGNORE,…关于重复

我必须在mysql表中插入一些值,但前提是没有其他(几乎)相等的行,例如:

TABLE T
KEY | COL1 | COL2
1   | abc  | 123
2   | def  | 456
键列使用自动递增,我不会在语句中通知它,如下所示:

INSERT INTO T (COL1, COL2) VALUES (abc, 123)
上面的语句具有与第一行相同的值。如果行是这样的重复行,我如何通知mysql我不想插入

我在谷歌上搜索了一些解决方案,发现
INSERT IGNORE,…关于重复密钥更新和替换
,我必须在其中通知PK,但我不知道(不使用额外的查询)。

你可以这样做

>   INSERT INTO memos(id,text) 
>     SELECT 5, 'text to insert' 
>     WHERE NOT EXISTS(SELECT 1 FROM memos WHERE id = 5 AND text = 'text to insert');

重复键上的
插入忽略
将使用任何唯一索引,而不仅仅是主键。因此,您可以为这些列添加唯一索引:

ALTER TABLE T
ADD UNIQUE INDEX (col1, col2);

使其成为多列索引意味着组合必须是唯一的,即使每个列可以单独复制。

这就是您要找的吗
IF
语句只能在过程中使用,不能在普通查询中使用。是的,我认为,但它们实际上都不是唯一的,只有整个组合才是唯一的。这就是为什么它是多列键,这意味着组合必须是唯一的。
ALTER TABLE T
ADD UNIQUE INDEX (col1, col2);