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

时间:2015-08-27 19:36:31

标签: mysql phpmyadmin phpstorm

我有这个SQL代码:

    SELECT * INTO #temp FROM
(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE')

SELECT * FROM #temp

当我在PhpStorm中通过SQL控制台运行它时 - 它运行正常并且计划任务正常工作,等等。

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

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;

第13行是#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 。老实说,我没有看到查询的任何语法问题。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

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

在语句前添加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忽略分隔符。

答案 1 :(得分:2)

您必须将DELIMITER设置为其他char。否则他们无法找到事件的结束。

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//

答案 2 :(得分:0)

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