这个My-SQL语句有什么问题?

时间:2015-08-31 12:35:27

标签: mysql sql exists

以下是声明:

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%肯定。)。

编辑:最好的方法是什么?为什么?

3 个答案:

答案 0 :(得分:1)

您不能在MySQL中的过程或例程之外使用IF语句。请改用INSERT IGNOREINSERT .. 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 KEYID才能正常工作。

使用此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;