MySQL 新建事件执行存储过程

开启事件调度器

SET GLOBAL event_scheduler = ON;

编写事件

注意:命令行会将分号【;】识别为结束符,可以使用navicat创建事件;或者使用DELIMITER关键字替换分号

/* 如果 error_event 事件存在, 则先删除它 */
DROP EVENT IF EXISTS error_event;
/* 创建一个名为 error_event 的事件 */
CREATE EVENT error_event
/* 每 10 秒钟执行一次 */
ON SCHEDULE EVERY 10 SECOND
/* 从当前时间开始执行 */
STARTS CURRENT_TIMESTAMP
DO
  /* 执行以下存储过程 */
  BEGIN
    /* 最大记录数 */
    DECLARE max_rows INT DEFAULT 1000000; 
    /* 删除记录数限制 */
    DECLARE delete_Limit INT DEFAULT 1000;
    /* 删除记录数 */
    DECLARE delete_rows INT; 
    /* 总记录数 */
    DECLARE total_rows INT;
    /* 查询总记录数 */
    SELECT COUNT(*) INTO total_rows FROM t_error;
    /* 删除超过的记录 */
    IF total_rows > max_rows THEN
      /* 计算需要删除的记录数 */
      SET delete_rows = total_rows - max_rows;
      IF delete_rows > delete_Limit THEN
        SET delete_rows = delete_Limit;
      END IF;
      /* 删除指定数量的记录 */ 
      DELETE FROM t_error ORDER BY create_time ASC LIMIT delete_rows;
    END IF;
    /* 删除指定数量的过期记录 */
    DELETE FROM t_error WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY) LIMIT delete_Limit;
  END;

 注意:命令行会将分号【;】识别为结束符,可以使用navicat创建事件;或者使用DELIMITER关键字替换分号

DELIMITER $$

/* 如果 error_event 事件存在, 则先删除它 */
DROP EVENT IF EXISTS error_event
$$
/* 创建一个名为 error_event 的事件 */
CREATE EVENT error_event
/* 每 10 秒钟执行一次 */
ON SCHEDULE EVERY 10 SECOND
/* 从当前时间开始执行 */
STARTS CURRENT_TIMESTAMP
DO
  /* 执行以下存储过程 */
  BEGIN
    /* 最大记录数 */
    DECLARE max_rows INT DEFAULT 1000000; 
    /* 删除记录数限制 */
    DECLARE delete_Limit INT DEFAULT 1000;
    /* 删除记录数 */
    DECLARE delete_rows INT; 
    /* 总记录数 */
    DECLARE total_rows INT;
    /* 查询总记录数 */
    SELECT COUNT(*) INTO total_rows FROM t_error;
    /* 删除超过的记录 */
    IF total_rows > max_rows THEN
      /* 计算需要删除的记录数 */
      SET delete_rows = total_rows - max_rows;
      IF delete_rows > delete_Limit THEN
        SET delete_rows = delete_Limit;
      END IF;
      /* 删除指定数量的记录 */ 
      DELETE FROM t_error ORDER BY create_time ASC LIMIT delete_rows;
    END IF;
    /* 删除指定数量的过期记录 */
    DELETE FROM t_error WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY) LIMIT delete_Limit;
  END;
$$
  
DELIMITER ;
  

 

posted @ 2024-06-13 17:33  Mr_Xul  阅读(15)  评论(0编辑  收藏  举报