首页 > 解决方案 > 当我尝试将它添加到事件时,SQL 查询不起作用

问题描述

我有这个查询:

SET @rank = 0;
UPDATE t1 SET rank = (@rank := @rank + 1)
ORDER BY balance DESC;

我想创建一个每 x 分钟执行一次此查询的事件,但我不断收到此错误:

以下查询失败:“CREATE DEFINER= root@ localhost EVENT updaterankON SCHEDULE EVERY 5 SECOND STARTS '2019-09-17 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO SET @rank = 0; UPDATE t1 SET rank = (@rank := @rank + 1) 按余额 DESC 排序;" MySQL 说:

1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 3 行的“UPDATE t1 SET rank = (@rank := @rank + 1) ORDER BY balance DESC”附近使用正确的语法

标签: mysql

解决方案


当我查看错误时,它会显示您在 MySQL 用户帐户/主机名中使用反引号,这些应该像'root'@'localhost'. 我会DEFINER = CURRENT_USER()改用,但一定要从正确的帐户运行它..

CREATE DEFINER = CURRENT_USER() EVENT `updaterank`
ON SCHEDULE EVERY 5 SECOND STARTS '2019-09-17 00:00:00' ON COMPLETION NOT PRESERVE ENABLE
DO
  SET 
   @rank = 0;
   UPDATE t1 SET rank = (@rank := @rank + 1) ORDER BY balance DESC;

演示

或者

CREATE DEFINER = CURRENT_USER() EVENT `updaterank`
ON SCHEDULE EVERY 5 SECOND STARTS '2019-09-17 00:00:00' ON COMPLETION NOT PRESERVE ENABLE
DO
  UPDATE t1 CROSS JOIN (SELECT @rank := 0) AS init  SET rank = (@rank := @rank + 1) ORDER BY balance DESC;

推荐阅读