我一直在尝试使用以下查询
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 */
我在做什么或者理解错了什么?
答案 0 :(得分:2)
if
语句只能用于编程块,例如存储过程,函数和触发器。
无论如何,MySQL为此功能提供了更简单的语法:insert . . . on duplicate key update
。
要使用它,id
必须具有唯一索引,唯一约束或定义为主键。我假设已经如此定义的列已经如此定义。
然后:
INSERT INTO users (id, username)
VALUES (2, user2)
ON DUPLICATE KEY UPDATE username = 'userUpdated';
答案 1 :(得分:0)
你错过了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;
答案 2 :(得分:0)
试试这个。
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'
答案 3 :(得分:0)
在MariaDB 10.1及更高版本中,您可以在存储过程之外使用复合语句。 This blog post可以很好地描述您可以用它做什么。
以下是博客的一个例子:
BEGIN NOT ATOMIC
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
START TRANSACTION;
stmt1;
....
stmtN;
COMMIT;
END