问题描述
创建一个复合唯一索引。这将允许在各个字段中进行任意数量的重复,但是组合必须是唯一的。
CREATE UNIQUE INDEX ix_uq ON test (field1, field2, field3);
…并INSERT IGnorE
在不违反唯一索引的情况下用于插入。如果是,则忽略插入。
INSERT IGnorE INTO test (field1,field2,field3) VALUES (1,1,1);
如果要插入(除非有重复项),然后更新(如果有),也可以使用INSERT INTO ... ON DUPLICATE KEY UPDATE
;
INSERT INTO test (field1, field2, field3) VALUES (1,1,1)
ON DUPLICATE KEY UPDATE field4=field4+1;
解决方法
由于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中,仅当在现有行中未找到指定的完全匹配的列时,才如何插入新行。
任何意见或建议,将不胜感激。