1

我想创建一个可以执行两个操作的事件,但我不知道如何操作。这是查询:

CREATE EVENT rate ON SCHEDULE EVERY 24 HOUR STARTS '2011-12-01 20:00:00' DO SET @p=1
UPDATE users SET rate = (@p:=@p+1) ORDER BY power DESC

我也尝试在操作之间写 AND,但它仍然写错误。

错误是:

\#1064 - 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 'UPDATE users SET rate = (@p:=@p+1) ORDER BY power DESC' at line 2
4

2 回答 2

1

您可以将事件的主体包装在BEGIN ... END复合语句块中:

CREATE EVENT rate ON SCHEDULE EVERY 24 HOUR STARTS '2011-12-01 20:00:00' DO BEGIN
  SET @p=1;
  UPDATE users SET rate = (@p:=@p+1) ORDER BY power DESC;
END

请注意,每条语句都必须以分号结尾,因此您必须将客户端配置为使用不同的语句分隔符,以便它不会认为第一个遇到的分号是CREATE EVENT命令的结尾(如何做到这一点取决于您的客户端, 但在MySQL 命令行工具中,可以使用DELIMITER 命令,在 phpMyAdmin 中可以设置 SQL 输入框下方的分隔符)。

或者,在这种情况下,您可以使用多表UPDATE语法来执行变量初始化,这样您只需要一个简单的语句:

CREATE EVENT rate ON SCHEDULE EVERY 24 HOUR STARTS '2011-12-01 20:00:00' DO
  UPDATE   users, (SELECT @p:=0) init
  SET      users.rate = (@p:=@p+1)
  ORDER BY users.power DESC
于 2012-12-21T17:09:11.223 回答
0

;您的陈述后缺少分号。

尝试这个:

CREATE EVENT rate ON SCHEDULE EVERY 24 HOUR STARTS '2011-12-01 20:00:00' 
      DO SET @p=1;
UPDATE users SET rate = (@p:=@p+1) ORDER BY power DESC;
于 2012-12-21T16:57:22.807 回答