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

问题描述

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

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

解决方法

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

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