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

What is wrong with this My-SQL statement?

声明如下:

IF NOT EXISTS (SELECT * FROM Players WHERE ID = 'Something') BEGIN
    INSERT INTO Players(ID, Msg) VALUES ('Something', 'Custom MSG')
END

错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near IF NOT EXISTS (SELECT * FROM Players WHERE ID = 'Something') BEGIN at line 1.

预期结果:我想制作一个row/column(不是 100% 确定。)具有玩家 ID 和模板消息。

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

您需要在过程中使用它,它以 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;

您不能在 MySQL 中的过程或例程之外使用 IF 语句。请改用 INSERT IGNOREINSERT .. ON DUPLICATE KEY UPDATE 语句。

INSERT IGNORE INTO Player (ID, Msg)
VALUES 
  ('Something', 'Custom MSG');

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.

应该在 ID 列上定义 PRIMARY KEYUNIQUE KEY 才能工作。

用这个SQL Fiddle

检查一下

更好的方法是简单地使用 MySQL 的 REPLACE INTO 语法。只需确保您的 ID 字段是主键并将查询写为:

REPLACE INTO Players(ID, Msg) VALUES ('Something', 'Custom MSG'); 

如果没有找到行,这将插入,如果找到以前存在的行,则根据主键进行更新。 Here你可以找到相关的文档。