/*
有必要说下语法:
CREATE EVENT [IFNOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
SCHEDULE表示的是时间,
[ON COMPLETION [NOT] PRESERVE] 表示的是否保持这个定时任务 默认不保持
[ENABLE | DISABLE] 初始化是否可用 默认可用
[COMMENT 'comment'] 注释
*/
-- 查看版本 MySQL5.1.6起
SELECT VERSION();
-- 查看事件调度器是否开启 ;
SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;
-- 开关事件调度器
SET GLOBAL event_scheduler = ON;
-- 创建推送表
drop TABLE if EXISTS ttx_test_db_push;
CREATE TABLE if not EXISTS `ttx_test_db_push` (
`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'ID',
`CREATE_time` datetime COMMENT '创建时间',
`is_push` INT(1) DEFAULT '0' COMMENT '是(0)否(1)推送',
`is_deleted` int(1) DEFAULT '0' COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数据互通测试推送表';
-- 创建接收表
drop TABLE if EXISTS ttx_test_db_receive;
CREATE TABLE if not EXISTS `ttx_test_db_receive` (
`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'ID',
`CREATE_time` datetime COMMENT '创建时间',
`is_deleted` int(1) DEFAULT '0' COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数据互通测试接收表';
-- 创建事件 每秒钟插入推送表一条数据
DROP EVENT IF EXISTS ttx_test_inset;-- 删除
CREATE EVENT ttx_test_inset ON SCHEDULE EVERY 1 SECOND DO
INSERT INTO ttx_test_db_push values (uuidUtils(), SYSDATE(),1, 0)
;
-- 查看
SELECT CURRENT_TIMESTAMP() from ttx_test_db_push;
-- 创建事件 没分钟清空一次
DROP EVENT IF EXISTS ttx_test_delete;-- 存在就删除
create event ttx_test_delete on SCHEDULE EVERY 1 MINUTE DO TRUNCATE TABLE ttx_test_db_push;
-- 一天之后清空
DROP EVENT IF EXISTS ttx_test_del_day; -- 存在就删除
CREATE EVENT ttx_test_del_day on SCHEDULE AT CURRENT_TIMESTAMP() + INTERVAL 1 DAY DO TRUNCATE TABLE ttx_test_db_push;
-- 某个时间点清空
DROP EVENT IF EXISTS ttx_test_del_some_day; -- 存在就删除
CREATE EVENT ttx_test_del_some_day on SCHEDULE AT TIMESTAMP('2017-10-09 13:10:10') DO TRUNCATE TABLE ttx_test_db_push;
-- 每天定时清空
DROP EVENT IF EXISTS ttx_test_del_one_day;-- 存在就删除
CREATE EVENT ttx_test_del_one_day on SCHEDULE EVERY 1 DAY DO TRUNCATE TABLE ttx_test_db_push;
-- 1天后开始 每天清空
DROP EVENT IF EXISTS ttx_test_del_start_one_day; -- 存在就删除
CREATE EVENT ttx_test_del_start_one_day on SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP() + INTERVAL 1 DAY DO TRUNCATE TABLE ttx_test_db_push;
-- 每天定时清空 1个月后结束
DROP EVENT IF EXISTS ttx_test_del_end_one_day; -- 存在就删除
CREATE EVENT ttx_test_del_end_one_day on SCHEDULE EVERY 1 DAY ENDS CURRENT_TIMESTAMP+ INTERVAL 1 MONTH DO TRUNCATE TABLE ttx_test_db_push;
-- 关闭事件
ALTER EVENT ttx_test_del_end_one_day DISABLE;
-- 开启事件
ALTER EVENT ttx_test_del_end_one_day ENABLE;
-- 修改时间
ALTER EVENT ttx_test_del_one_day ON SCHEDULE EVERY 5 DAY;
-- 案例 调用存储过程 一分钟推送一次到接收表
-- 推送表1秒钟一条数据 每天凌晨清空一次 接收表每分钟接收一次接收表10天清空一次
DROP PROCEDURE if EXISTS ttx_data_push;
CREATE PROCEDURE ttx_data_push()
BEGIN
DECLARE vcount int(10) ;
drop table if EXISTS tem_com;
CREATE TEMPORARY TABLE tem_com(
`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'ID',
`CREATE_time` datetime COMMENT '创建时间'
);
-- 开启事务
START TRANSACTION;
SELECT count(1) into vcount from ttx_test_db_push t where t.is_push=1;
SELECT CONCAT(CURRENT_DATE(),'推送了:',vcount);
-- 清空临时表
TRUNCATE TABLE tem_com;
-- 插入数据
insert into tem_com(id,CREATE_time) SELECT t.id,t.CREATE_time from ttx_test_db_push t where t.is_push = 1 and t.is_deleted = 0 ;
-- 更新推送表
UPDATE ttx_test_db_push set is_push=0 where is_push = 1 and is_deleted = 0 ;
-- 更新接收表
insert into ttx_test_db_receive(id,CREATE_time,is_deleted)SELECT id,CREATE_time,0 from tem_com;
-- 提交事务
commit;
end;
-- 创建事件 每秒钟插入推送表一条数据
DROP EVENT IF EXISTS ttx_test_inset;-- 删除
CREATE EVENT ttx_test_inset ON SCHEDULE EVERY 1 SECOND DO INSERT INTO ttx_test_db_push values (uuidUtils(), SYSDATE(),1, 0);
-- 每天定时清空
DROP EVENT IF EXISTS ttx_test_del_one_day;-- 存在就删除
CREATE EVENT ttx_test_del_one_day on SCHEDULE EVERY 1 DAY DO TRUNCATE TABLE ttx_test_db_push;
DROP EVENT IF EXISTS ttx_test_data_push;
CREATE EVENT ttx_test_data_push ON SCHEDULE EVERY 1 MINUTE DO call ttx_data_push();
-- 验证 完成
SELECT * from ttx_test_db_push;
SELECT * from ttx_test_db_receive;
mysql 定时任务详解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.