You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL定时事件语法错误排查:保留指定数量文章的删除事件

MySQL事件报错排查与修正

你的SQL有两个关键问题导致1064语法错误:

  • 默认分隔符冲突:MySQL默认用分号;作为语句结束符,但BEGIN...END块里的分号会被提前识别为整个CREATE EVENT语句的结束,引发语法错误。
  • LIMIT不支持表达式:LIMIT row_count - 100里的表达式不被MySQL支持,LIMIT仅接受常量或预定义的用户变量。

修正后的完整SQL如下:

DELIMITER //
USE travemdb;

CREATE EVENT delete_old_rows
ON SCHEDULE EVERY 1 MINUTE -- 测试用,实际改成 EVERY 1 MONTH
DO
  BEGIN
    DECLARE row_count INT;
    DECLARE delete_limit INT;
    -- 统计目标类型文章数量
    SELECT COUNT(*) INTO row_count FROM article WHERE article_type_id = 2;
    -- 计算需要删除的行数
    SET delete_limit = row_count - 100;
    IF row_count >= 100 THEN
      -- 使用预定义变量作为LIMIT参数
      DELETE FROM article 
      WHERE article_type_id = 2 
      ORDER BY id -- 按id排序,删除旧的(假设id递增代表创建时间)
      LIMIT delete_limit;
    END IF;
  END //
DELIMITER ;

额外说明

  1. 切换实际执行周期:把EVERY 1 MINUTE改成EVERY 1 MONTH即可满足每月执行的需求。
  2. 确保事件调度器开启:可以执行SHOW VARIABLES LIKE 'event_scheduler';查看状态,若为OFF,执行SET GLOBAL event_scheduler = ON;开启(重启MySQL后会失效,需在配置文件里永久设置)。

内容的提问来源于stack exchange,提问作者Friki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 18:14:57