今天遇到的业务为了减少服务器压力、提高性能、少写Java代码,所以需要写数据库定时脚本来完成。
一、查看定时器、打开定时器
-- 开启event
SET GLOBAL event_scheduler='ON';
-- 查看定时器
SHOW VARIABLES LIKE 'event_scheduler';
二、写存储过程供定时任务调用
DELIMITER
DROP PROCEDURE IF EXISTS 存储过程名_proce; -- 避免出错,如果有这个名字就删除
CREATE PROCEDURE 存储过程名_proce() -- 更新设备心跳状态存储过程
BEGIN
DECLARE t_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
START TRANSACTION; -- 开启事务
-- 定时脚本需要执行的SQL
-- 这里写需要执行的SQL语句,如果不涉及到事务,去掉事务相关的代码
IF t_error=1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
SELECT t_errot; -- 返回标识位的结果集
END;
DELIMITER;
三、写定时任务
DROP EVENT IF EXISTS 事件名称_event;
CREATE EVENT 事件名称_event -- 创建一个事件每60秒执行一次
ON SCHEDULE EVERY 60 SECOND
ON COMPLETION PRESERVE DISABLE
DO CALL 存储过程名称_proce();
四、开启定时任务
-- 开启事件
ALTER EVENT 事件名称_event ON COMPLETION PRESERVE ENABLE;
五、到这里就完成了,一个完整的数据库脚本,直接运行即可。(亲测可用,已经跑在了我们数据库服务器上)。
这里附上关闭事务和查看自己写的所有事务所需代码
-- 关闭事件
-- ALTER EVENT 事件名称_event ON COMPLETION PRESERVE DISABLE;
-- 查看自己创建的event
-- SELECT * FROM mysql.`event`;
六、我们学的更多的是解决问题的能力。本文参考了两篇博客,这里分享给大家。
https://www.cnblogs.com/pengzijun/p/6929949.html
http://blog.csdn.net/lishaojun0115/article/details/50386425