首页 > 解决方案 > phpmyadmin 事件语法错误,而它适用于 sql 命令

问题描述

从排名中删除;ALTER TABLE 排名 AUTO_INCREMENT = 1; INSERT INTO Ranking (username) select username from Players order by rank desc LIMIT 100;

这是我想每 10 分钟执行一次的命令,我有一个应该不断存储前 100 名玩家的表。如果我将命令输入到 sql 命令行中,它工作正常。但是,一旦我想在出现此错误的情况下使用相同的命令来执行。

在此处输入图像描述

也许我不了解事件的局限性,有人可以告诉我我做错了什么吗?遗憾的是,我正在使用运行 Maria Db 的服务器。10.1.48 所以我不能使用新的 Windows 函数,比如 Rank()

标签: phpmyadminmariadbmariadb-10.1

解决方案


看起来您正在使用三个 SQL 语句定义一个事件,但没有BEGIN ... END在它们周围使用块。如果您的事件有多个语句,则需要使用 BEGIN 和 END。

所以你的事件定义应该是:

CREATE EVENT ...
DO BEGIN
  DELETE FROM Ranking; 
  ALTER TABLE Ranking AUTO_INCREMENT = 1; 
  INSERT INTO Ranking (username) select username from Players order by rank desc LIMIT 100;
END

我建议阅读:https ://mariadb.com/kb/en/begin-end

我还将评论您可以替换前两个语句,TRUNCATE TABLE Ranking;这将删除所有行并比使用更快地重置自动增量DELETE。如果表中只有 100 行,也许您不会注意到差异,但如果表变大,您可能会注意到。


推荐阅读