2

由于 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 中,仅当在现有行中未找到精确指定的列匹配时,如何插入新行。

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

4

1 回答 1

18

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

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

...INSERT IGNORE如果不违反唯一索引,则用于插入。如果是,请忽略插入。

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

一个用于测试的 SQLfiddle

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

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

另一个 SQLfiddle

于 2013-07-30T20:15:56.983 回答