如果存在更新,则在一个查询中插入

Mic*_*hal 2 php mysql sql

我有这样简单的表格:

+----------+---------------+-------------+
| ID (int) | KEY (varchar) | VALUE (int) |
+----------+---------------+-------------+
|        1 | asdf          |         100 |
|        2 | fdsa          |         321 |
|        3 | ecda          |         211 |
+----------+---------------+-------------+
Run Code Online (Sandbox Code Playgroud)

我想更新行,KEY = 'something'但如果没有KEY = 'something'我想要INSERT新行的行:

+----------+---------------+-------------+
| ID (int) | KEY (varchar) | VALUE (int) |
+----------+---------------+-------------+
|        1 | asdf          |         100 |
|        2 | fdsa          |         321 |
|        3 | ecda          |         211 |
|        4 | something     |         200 |
+----------+---------------+-------------+
Run Code Online (Sandbox Code Playgroud)

只有一个查询可以吗?

pet*_*erm 7

你可以利用 ON DUPLICATE KEY UPDATE

INSERT INTO yourtable (`id`, `key`, `value`) VALUES (4, 'something', 200)
ON DUPLICATE KEY UPDATE `value` = 200; 
Run Code Online (Sandbox Code Playgroud)

key 列应该有UNIQUE索引

SQLFiddle


Fab*_*ler 6

是的,这很简单.

这就是你要找的东西:

IF EXISTS (SELECT * FROM Table1 WHERE Column1='SomeValue')
    UPDATE Table1 SET (...) WHERE Column1='SomeValue'
ELSE
    INSERT INTO Table1 VALUES (...)
Run Code Online (Sandbox Code Playgroud)