是什么导致了我的 SQL 查询中 IF EXISTS 行中的语法错误


What’s causing the syntax error in the IF EXISTS line in my SQL query?

我正在运行这个SQL查询:

IF EXISTS (SELECT * FROM score WHERE username='ms')
UPDATE score SET score='30' WHERE username='ms'
ELSE 
INSERT INTO score (username,score) VALUES ('ms','30')

但我不断收到此语法错误:

1064 - 您的 SQL 语法有误;请查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的 IF EXISTS (SELECT * FROM score WHERE username='ms') UPDATE score SET score='30' 附近使用的正确语法

我做错了什么?

if 作为控制流只允许在存储过程、函数和触发器中的编程块中使用。 这不应该与函数混淆 if() ,一个在任何表达式中都允许的非标准 MySQL 扩展。

但是,您可以使用 replaceon duplicate key update . 首先,在 username 上创建一个唯一的索引:

create unique index idx_score_username on score(username);

然后插入为:

INSERT INTO score (username, score)
    VALUES ('ms', 30)
    ON DUPLICATE KEY UPDATE score = VALUES(score);

请注意,我从 '30' 中删除了单引号。 如果score1是数字(我认为这是一个合理的假设(,那么使用数字常量而不是字符串常量。