2013-11-26 88 views
1

这不是(确切)重复的this questions,因此我开始了一个新的字段。,如果不存在则插入(MySQL)

我有此表(ID是初级和自动递增)

ID | mykey | myfoo | mybar 
============================ 
1 | 1.1 | abc | 123 
2 | 1.1.1 | def | 456 
3 | 1.2 | abc | 789 
4 | 1.1 | ghi | 999 

我想更新第1行与mybar = “333” 仅当的myKey = '1.1' AND myfoo =“ABC '

如果mykey!='1.1' myfoo!='abc'我想插入一个新行。

这是可能的一个声明?

+1

为什么你不在'(mykey,myfoo)'上添加一个唯一的键,然后使用'ON DUPLICATE KEY'解决方案? – Barmar

+0

'mykey'可以具有相同的值一次,'myfoo'相同 – Xaver

+0

唯一键只适用于两者的组合。 – Barmar

回答

5

MySQL中的唯一索引不必位于单个列中。您只需在您的ALTER TABLE..ADD UNIQUE语句中指定添加更多的列上的多个列的唯一索引:

ALTER TABLE myTable ADD UNIQUE (
    mykey, 
    myfoo 
); 

现在你可以使用普通INSERT INTO...ON DUPLICATE KEY声明。

SQLFiddle DEMO记录未添加多个重复的值 - 其他都是

注意

如果任何一个为NULL,则算作是独一无二的。 mykey为'bar',并且myfoo为NULL时,即使它们具有“相同”值(NULL不是真正的值),也可以将其添加到无穷大。

+0

谢谢!从来没有想过这是可能的:) – Xaver

+0

SQLFiddle演示似乎表明重复值被忽略。答案是正确的,但如果演示中显示“插入...正在重复键”,演示将会更好。 – John