【问题标题】:SQL query not working when I try to add it on a Event当我尝试将它添加到事件时,SQL 查询不起作用
【发布时间】:2019-09-17 11:25:37
【问题描述】:

我有这个问题:

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

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

以下查询失败:“CREATE DEFINER=root@localhost 活动updaterank 按计划每 5 秒开始 '2019-09-17 00:00:00' 完成时不保留启用 DO SET @rank = 0;更新 t1 SET rank = (@rank := @rank + 1) ORDER BY balance DESC;" MySQL 说:

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

【问题讨论】:

  • 您可能需要将开头的DELIMTER; 重新定义为其他内容(例如:$$)。检查这个答案(例如):stackoverflow.com/a/52557540/2469308
  • 像您展示的示例一样尝试过,但似乎没有这样做
  • 请发布完整的查询,包括您正在运行以创建事件的CREATE ... 部分。
  • 这是完整的查询

标签: mysql


【解决方案1】:

当我查看错误时,它会显示您在 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;

demo

或者

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;

【讨论】:

    猜你喜欢
    • 2016-08-16
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多