SQL 查询从 IDE 运行但不在 phpmyadmin 中运行

SQL query runs from IDE but not in phpmyadmin

我有这个 SQL 代码:

CREATE EVENT `update_statistics`
  ON SCHEDULE EVERY 1 DAY STARTS '2015-08-24 02:00:00'
  ON COMPLETION PRESERVE
DO BEGIN

  UPDATE statistics
  SET km_traveled     = (SELECT sum(km)
                         FROM archived_trips),
    passengers_driven = (SELECT sum(passengers)
                         FROM archived_trips),
    trips_taken       = (SELECT count(*)
                         FROM archived_trips)
  WHERE id = 1;

  UPDATE statistics
  SET co_saved = ((SELECT km_traveled
                   FROM statistics) * 0.215 * (SELECT passengers_driven
                                               FROM statistics))
  WHERE id = 1;

END;

当我 运行 它通过 PhpStorm 中的 SQL 控制台时 - 它 运行 很好,计划任务工作等等。

但是如果我尝试 运行 直接在 phpmyadmin 中查询,我会收到以下错误:

#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 '' at line 13 

第 13 行是 WHERE id=1;。老实说,我没有发现查询有任何语法问题。有什么建议吗?

在黑暗中拍摄,但尝试删除 END 后的分号。

查询的分隔符是';'和 ';'存储过程中也用到了,导致查询失败

在语句前添加 DELIMITER // 并以 // 结尾以解决此问题。

DELIMITER //

CREATE EVENT `update_statistics`
  ON SCHEDULE EVERY 1 DAY STARTS '2015-08-24 02:00:00'
  ON COMPLETION PRESERVE
DO BEGIN

  UPDATE statistics
  SET km_traveled     = (SELECT sum(km)
                         FROM archived_trips),
    passengers_driven = (SELECT sum(passengers)
                         FROM archived_trips),
    trips_taken       = (SELECT count(*)
                         FROM archived_trips)
  WHERE id = 1;

  UPDATE statistics
  SET co_saved = ((SELECT km_traveled
                   FROM statistics) * 0.215 * (SELECT passengers_driven
                                               FROM statistics))
  WHERE id = 1;

END; //

DELIMITER ;

使用 PHPstorm,一次发送多个查询可能被禁用,导致 MySQL 忽略分隔符。

您必须将分隔符设置为其他字符。否则他们无法知道活动的结束。

DELIMITER //


CREATE EVENT `update_statistics`
  ON SCHEDULE EVERY 1 DAY STARTS '2015-08-24 02:00:00'
  ON COMPLETION PRESERVE
DO BEGIN

  UPDATE statistics
  SET km_traveled     = (SELECT sum(km)
                         FROM archived_trips),
    passengers_driven = (SELECT sum(passengers)
                         FROM archived_trips),
    trips_taken       = (SELECT count(*)
                         FROM archived_trips)
  WHERE id = 1;

  UPDATE statistics
  SET co_saved = ((SELECT km_traveled
                   FROM statistics) * 0.215 * (SELECT passengers_driven
                                               FROM statistics))
  WHERE id = 1;

END//