如果存在则更新,否则插入一条记录的查询语句

3

我有一个简单的表格,如下所示:

+----------+---------------+-------------+
| ID (int) | KEY (varchar) | VALUE (int) |
+----------+---------------+-------------+
|        1 | asdf          |         100 |
|        2 | fdsa          |         321 |
|        3 | ecda          |         211 |
+----------+---------------+-------------+

我希望更新 KEY = 'something' 的行,但如果没有满足 KEY = 'something' 条件的行,则需要插入新行:INSERT

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

是否可以只用一条查询实现?

2个回答

8
您可以使用ON DUPLICATE KEY UPDATE来更新重复的键值对。
INSERT INTO yourtable (`id`, `key`, `value`) VALUES (4, 'something', 200)
ON DUPLICATE KEY UPDATE `value` = 200; 

key列应该在它上面建立唯一索引。

SQLFiddle


6

是的,这很简单。

这就是你要找的内容:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接