mysql-insert不复制行(不通知pk)

83qze16e  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(370)

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

TABLE T
KEY | COL1 | COL2
1   | abc  | 123
2   | def  | 456

键列使用自动递增,我不会在语句中通知它,如下所示:

INSERT INTO T (COL1, COL2) VALUES (abc, 123)

上面的语句与第一行的值相同。如果行是这样的重复行,如何通知mysql我不想插入?
我搜索了一些解决方案,发现 INSERT IGNORE, ..ON DUPLICATE KEY UPDATE and REPLACE 其中我必须通知pk,但我不知道(不使用额外的查询)。

sg3maiej

sg3maiej1#

if not exists(select * from t where col1 = "abc" and col2 ="123")then 
  insert into t (col1,col2) values("abc",123 );
end if;
xbp102n0

xbp102n02#

ON DUPLICATE KEY 以及 INSERT IGNORE 将使用任何唯一索引,而不仅仅是主键。因此,可以为这些列添加唯一索引:

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

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

vc6uscn9

vc6uscn93#

你可以像。。。

>   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');

相关问题