Я пытаюсь использовать следующий запрос
IF EXISTS (SELECT id FROM users WHERE id = 1)
THEN
(INSERT INTO users (id, username) VALUES (2, user2))
ELSE
(UPDATE users SET username = 'userUpdated')
Но я продолжаю получать
/* SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INSERT INTO users (id) VALUES (2)) ELSE (UPDATE users SET id = 11)' at line 1 */
Также попытался использовать следующий запрос
IF EXISTS (SELECT id FROM users WHERE id = 1)
THEN
(SELECT username FROM users WHERE id = 1)
ELSE
(INSERT INTO users (id, username) VALUES (1, 'user'))
Но на этот раз я получил
/* SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ELSE
(INSERT INTO users (id, username) VALUES (1, 'user'))' at line 4 */
Я что-то сделал или понял что-то не так?
Оператор if
может использоваться только в блоках программирования, таких как хранимые процедуры, функции и триггеры.
В любом случае MySQL предлагает более простой синтаксис для этой функции: insert... on duplicate key update
insert... on duplicate key update
insert... on duplicate key update
.
Чтобы использовать его, id
должен иметь уникальный индекс, уникальное ограничение или быть определен как первичный ключ. Позвольте мне предположить, что так называемый столбец уже определен.
Затем:
INSERT INTO users (id, username)
VALUES (2, user2)
ON DUPLICATE KEY UPDATE username = 'userUpdated';
Попробуй это.
IF EXISTS (SELECT id FROM users WHERE id = 1)
begin
INSERT INTO users (id, username) VALUES (2, 'user2')
end
ELSE
UPDATE users SET username = 'userUpdated'
В MariaDB 10.1 и новее вы можете использовать составные инструкции вне хранимых процедур. Это сообщение в блоге дает хорошее описание того, что вы можете с ним сделать.
Вот пример блога:
BEGIN NOT ATOMIC
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
START TRANSACTION;
stmt1;
....
stmtN;
COMMIT;
END
Вы пропускаете END IF (и полуколоны)?
IF EXISTS (SELECT id FROM users WHERE id = 1)
THEN
(SELECT username FROM users WHERE id = 1);
ELSE
(INSERT INTO users (id, username) VALUES (1, 'user'));
END IF;
[SELECT else INSERT]
не может быть применено?