数据库
首页 > 数据库> > 如果列(允许重复)的组合是唯一的,则MySQL仅插入新行

如果列(允许重复)的组合是唯一的,则MySQL仅插入新行

作者:互联网

由于MySQL不支持IF EXISTS,我很难想到在MySQL中执行类似下面伪操作的语法:

IF ((select count(*) from table where col1='var1' AND col2='var2' AND col3='var3' AND col4='var4' AND col5='var5')>0) then
    combination of vars exist in record - do a thing;
ELSE
    combination of vars does not exist in record - insert record;
END IF;

我应该认为CASE适合这种情况,但对于我的生活,我无法想到正确的语法.我使用唯一索引,但每个列都需要允许重复,它只是所有列的匹配组合,需要是唯一的,而不是字段本身.

我被告知在所有列中使用复合键可以避免重复插入,但是从我收集的内容中我需要使用不同的插入.

简短版本:在MySQL中,如果在现有行中找不到精确指定的列匹配,如何插入新行.

任何建议或意见将不胜感激.

解决方法:

创建复合唯一索引.这将允许各个字段中的任意数量的重复,但组合必须是唯一的.

CREATE UNIQUE INDEX ix_uq ON test (field1, field2, field3);

…如果未违反唯一索引,则使用INSERT IGNORE进行插入.如果是,只需忽略插入.

INSERT IGNORE INTO test (field1,field2,field3) VALUES (1,1,1);

An SQLfiddle for testing.

如果你想要插入除非有重复,并更新,如果有,你也可以使用INSERT INTO … ON DUPLICATE KEY UPDATE;

INSERT INTO test (field1, field2, field3) VALUES (1,1,1)
  ON DUPLICATE KEY UPDATE field4=field4+1;

Another SQLfiddle.

标签:composite-key,sql,mysql,if-statement,primary-key
来源: https://codeday.me/bug/20191006/1859726.html