以下是声明:
IF NOT EXISTS (SELECT * FROM Players WHERE ID = 'Something') BEGIN
INSERT INTO Players(ID, Msg) VALUES ('Something', 'Custom MSG')
END
错误:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在第1行
IF NOT EXISTS (SELECT * FROM Players WHERE ID = 'Something') BEGIN
附近。
预期结果:我想创建一个具有播放器ID和模板消息的行/列(不是100%肯定。)。
编辑:最好的方法是什么?为什么?
答案 0 :(得分:1)
您不能在MySQL中的过程或例程之外使用IF
语句。请改用INSERT IGNORE
或INSERT .. ON DUPLICATE KEY UPDATE
语句。
INSERT IGNORE INTO Player (ID, Msg)
VALUES
('Something', 'Custom MSG');
OR
INSERT INTO Player (ID, Msg)
VALUES
('Something', 'Custom MSG')
ON DUPLICATE KEY UPDATE
Msg = Msg; -- or Msg = VALUES(Msg) to update to the new value.
PRIMARY KEY
列上应该定义UNIQUE KEY
或ID
才能正常工作。
使用此SQL Fiddle
进行检查答案 1 :(得分:0)
更好的方法是简单地使用MySQL的REPLACE INTO
语法。只需确保您的ID字段是主键,并将您的查询写为:
REPLACE INTO Players(ID, Msg) VALUES ('Something', 'Custom MSG');
如果没有找到行,则为INSERT,如果根据主键找到以前存在的行,则为UPDATE。 Here您可以找到相关文档。
答案 2 :(得分:-3)
您需要在程序中使用它,并以END IF;
结束Create procedure proc_name
as
Begin
IF NOT EXISTS (SELECT * FROM Players WHERE ID = 'Something') BEGIN
INSERT INTO Players(ID, Msg) VALUES ('Something', 'Custom MSG');
END IF;
end;