У меня такая простая таблица:
+----------+---------------+-------------+ | ID (int) | KEY (varchar) | VALUE (int) | +----------+---------------+-------------+ | 1 | asdf | 100 | | 2 | fdsa | 321 | | 3 | ecda | 211 | +----------+---------------+-------------+
и я хочу обновить строку, где KEY = 'something'
но если нет строки, где KEY = 'something'
я хочу INSERT
новую строку INSERT
:
+----------+---------------+-------------+ | ID (int) | KEY (varchar) | VALUE (int) | +----------+---------------+-------------+ | 1 | asdf | 100 | | 2 | fdsa | 321 | | 3 | ecda | 211 | | 4 | something | 200 | +----------+---------------+-------------+
Возможно ли это только в одном запросе?
Вы можете использовать ON DUPLICATE KEY UPDATE
INSERT INTO yourtable (`id`, `key`, `value`) VALUES (4, 'something', 200) ON DUPLICATE KEY UPDATE `value` = 200;
key
столбец должен иметь на нем индекс UNIQUE
SQLFiddle
Да, это довольно просто.
Это то, что вы ищете:
IF EXISTS (SELECT * FROM Table1 WHERE Column1='SomeValue') UPDATE Table1 SET (...) WHERE Column1='SomeValue' ELSE INSERT INTO Table1 VALUES (...)