2013-07-30 67 views
1

由於IF EXISTS由MySQL我奮力想語法做類似下面的僞在MySQL不支持: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中,如果僅在現有行中未找到精確指定的列匹配的情況下如何插入新行。

任何意見或建議將不勝感激。

+0

爲什麼你需要爲包含組合鍵的表使用不同的插入語句? – ObieMD5

+0

我的意思是我不得不使用插入忽略(這是很好),否則它不會像我需要它的行爲。 – Gavin

回答

17

創建一個複合唯一索引。這將允許在各個字段中有任意數量的副本,但組合需要是唯一的。

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

+0

非常感謝!我今天會試試這個。 (也感謝給我介紹SQLfiddle,這一定會派上用場。) – Gavin

相關問題