如果存在两个字段则更新,如果不存在则插入(MySQL)

Xav*_*ver 1 mysql insert

这不是这个问题的(确切)重复,所以我开始了一个新问题.

我有这个表(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
Run Code Online (Sandbox Code Playgroud)

我想在mybar ='1.1' myfoo ='abc'的情况下用mybar ="333"更新第1行

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

这可能是一个声明吗?

h2o*_*ooo 6

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

ALTER TABLE myTable ADD UNIQUE (
    mykey,
    myfoo
);
Run Code Online (Sandbox Code Playgroud)

现在您可以使用常规INSERT INTO...ON DUPLICATE KEY语句.

SQLFiddle DEMO(注意,不添加多个重复值 - 所有其他值都是)

注意:

如果其中一个为NULL,则不会将其计为唯一.即使它们具有"相同"值(NULL实际上不是值),也可以将mykey'bar'和myfooNULL添加到无穷大.

  • SQLFiddle 演示似乎演示了重复值被忽略。答案是正确的,但如果演示显示“INSERT INTO...ON DUPLICATE KEY”正在运行,效果会更好。 (2认同)