mysql - SQL 事件的语法问题

标签 mysql sql

我正在尝试在 MySQL 上运行此代码:

SET GLOBAL event_scheduler = ON;
CREATE EVENT timer
ON SCHEDULE EVERY 1 MINUTE
DO // this is the line of error
IF CURRENT_TIMESTAMP > timer THEN UPDATE users SET online = '0' WHERE CURRENT_TIMESTAMP > timer;
END IF;

但它返回:#1064 - 第 4 行“”附近的语法错误。 错误在哪里?

最佳答案

As with stored routines, you can use compound-statement syntax in the DO clause by using the BEGIN and END keywords, as shown在该页面的示例中

delimiter |

CREATE EVENT e_daily
    ON SCHEDULE
      EVERY 1 DAY
    COMMENT 'Saves total number of sessions then clears the table each day'
    DO
      BEGIN
        INSERT INTO site_activity.totals (time, total)
          SELECT CURRENT_TIMESTAMP, COUNT(*)
            FROM site_activity.sessions;
        DELETE FROM site_activity.sessions;
      END |

delimiter ;

你的 SQL 如何与这个想法一起工作的想法是:

SET GLOBAL event_scheduler = ON;

-- change the delimiter so you can embed ; in your event_body
delimiter |

CREATE EVENT timer
    ON SCHEDULE
      EVERY 1 MINUTE
    DO
      BEGIN
          IF CURRENT_TIMESTAMP > timer
            THEN UPDATE users SET online = '0' WHERE CURRENT_TIMESTAMP > timer;
          END IF 
      END |

-- reset the delimiter
delimiter ;

关于mysql - SQL 事件的语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58942760/

相关文章:

mysql - 如何在 C 中导出不透明类型

sql - 如何在T-SQL中计算GROUP BY行

sql - 每个 DDL SQL 命令都是可逆的吗? 【数据库版本控制】

sql - Cassandra复制命令仅插入部分数据

php - mysqli_fetch_array 在 php 7 中不起作用

mysql - 根据列值显示替代结果

mysql - 简单(?)MySQL 按查询分组

mysql - 是否可以使用 SQL 将数组放入一行/列中?

sql - Postgres : If we select a computed column multiple times, Postgres会一次又一次地计算它吗?

c# - SqlCeParameter 返回自动 ID(主键)