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 ;