在 sql 命令上工作时出现 phpmyadmin 事件语法错误
phpmyadmin Event syntax error while it works on the sql command
从排名中删除;
改变 TABLE 排名 AUTO_INCREMENT = 1;
插入排名(用户名)
select 用户名
来自玩家
按等级排序 LIMIT 100;
这是我想每 10 分钟执行一次的命令,我有一个 table 应该不断存储前 100 名玩家。如果我将命令输入 sql 命令行,它工作正常。但是,一旦我想在事件中使用相同的命令执行,就会出现此错误。
也许我不理解事件的局限性有人可以告诉我我做错了什么吗?
遗憾的是,我正在使用运行 Maria Db 的服务器。 10.1.48 所以我不能使用像 Rank()
这样的新 Windows 函数
看起来您正在用三个 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
更快地重置自动增量。如果 table 中只有 100 行,您可能不会注意到差异,但如果 table 变大,您可能会注意到。
从排名中删除; 改变 TABLE 排名 AUTO_INCREMENT = 1; 插入排名(用户名) select 用户名 来自玩家 按等级排序 LIMIT 100;
这是我想每 10 分钟执行一次的命令,我有一个 table 应该不断存储前 100 名玩家。如果我将命令输入 sql 命令行,它工作正常。但是,一旦我想在事件中使用相同的命令执行,就会出现此错误。
也许我不理解事件的局限性有人可以告诉我我做错了什么吗? 遗憾的是,我正在使用运行 Maria Db 的服务器。 10.1.48 所以我不能使用像 Rank()
这样的新 Windows 函数看起来您正在用三个 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
更快地重置自动增量。如果 table 中只有 100 行,您可能不会注意到差异,但如果 table 变大,您可能会注意到。