公司网站自己创建,百度网址大全pc版怎么下载,保健品网站模板,嘚嘚笔记 wordpress主推MYSQL5.1开始支持EVENT功能#xff0c;类似Oracle和MSSQL的定时任务job功能。有了这个功能之后我们就可以让MySQL自动的执行存储过程来实现数据汇总等功能了#xff0c;不用像以前哪样手动操作完成了。下面我们来测试下#xff0c;在MYSQL中如何自动执行指定存储过程#x… MYSQL5.1开始支持EVENT功能类似Oracle和MSSQL的定时任务job功能。有了这个功能之后我们就可以让MySQL自动的执行存储过程来实现数据汇总等功能了不用像以前哪样手动操作完成了。下面我们来测试下在MYSQL中如何自动执行指定存储过程实现相关功能。 一、创建测试表 CREATE TABLE EVENT_table( id INT auto_increment PRIMARY KEY NOT NULL, conent VARCHAR(80) )ENGINEINNODB DEFAULT CHARSETutf8; 二、创建调用存储过程 DROP PROCEDURE IF EXISTS pr_event; CREATE PROCEDURE pr_event( ) proc_start:BEGIN INSERT INTO EVENT_table(conent) VALUES (520); END proc_start 三、创建事件调用存储过程 创建事件语法 CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE SCHEDULE [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT comment] DO sql_statement; 要使定时事件起作用MySQL的常量GLOBAL event_scheduler必须为on或者是1。 1、查看scheduler的当前状态 a、SHOW VARIABLES LIKE event_scheduler; b、SELECT event_scheduler; 2、修改scheduler状态为打开(0:off , 1:on) SHOW VARIABLES LIKE event_scheduler;-- 查看是否开启定时器OFF关闭ON开启 打开定时器四种方式 a、SET GLOBAL event_schedulerON; b、SET global.EVENT_schedulerON; c、SET GLOBAL event_scheduler1; d、SET global.event_scheduler1; 3、创建事件设置每10分钟执行一次(调用pr_event存储过程)。 CREATE EVENT IF NOT EXISTS ent_test ON SCHEDULE EVERY 10 MINUTE -- ON COMPLETION PRESERVE -- 当EVENT到期时EVENT会被disable但是该EVENT还是会存在 -- ON COMPLETION NOT PRESERVE -- 当EVENT到期时该EVENT会被自动删掉该项为默认值 DO CALL pr_event(); -- pr_event()为需要定时处理的存储过程这里也可以改成相关SQL可执行语句 4、开启事件 ALTER EVENT ent_test ENABLE; 5、临时关闭事件 ALTER EVENT ent_test DISABLE; 6、重命名事件并加上备注 ALTER EVENT test.ent_test RENAME TO ent_test_new COMMENT 重命名事件ent_test; 7、删除事件 DROP EVENT IF EXISTS ent_test; 8、查看指定事件的详细信息 SELECT * FROM information_schema.EVENTS WHERE event_nameent_test; SELECT * FROM information_schema.EVENTS WHERE event_name LIKE CONCAT(%,ent_test,%); 9、查看事件的创建SQL语句 SHOW CREATE EVENT ent_test; 四、一些典型应用示例 1、从现在开始每隔九天定时执行 CREATE EVENT EVENT1 ON SCHEDULE EVERY 9 DAY STARTS NOW() ON COMPLETION PRESERVE ENABLE DO BEGIN CALL TOTAL(); END 2、每个月的一号凌晨1 点执行 CREATE EVENT EVENT2 ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR) ON COMPLETION PRESERVE ENABLE DO BEGIN CALL STAT(); END 3、每个季度一号的凌晨2点执行 CREATE EVENT TOTAL_SEASON_EVENT ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),-,ELT(QUARTER(CURDATE()),1,4,7,10),-,1)),INTERVAL 1 QUARTER),INTERVAL 2 HOUR) ON COMPLETION PRESERVE ENABLE DO BEGIN CALL SEASON_STAT(); END 4、每年1月1号凌晨四点执行 CREATE EVENT TOTAL_YEAR_EVENT ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) 1,-,1,-,1)),INTERVAL 4 HOUR) ON COMPLETION PRESERVE ENABLE DO BEGIN CALL YEAR_STAT(); END MySQL的event和Oralce的Job还是有点不同的这点让笔者比较困扰 5、在进行按月季年进行自动调用存储过程时为了测试可以把系统改为年的最后一天如2010-12-31 23:59:55; 这个Oracle的Job就会把月季年存储过程执行一遍。但MySQL改了系统时间了Event也没有定时执行。不知道各位大虾有没有什么好办法?可以解决这个问题。 五、查看事件运行基本信息 SELECT * FROM information_schema.events ORDER BY last_executed DESC SELECT * FROM mysql.event ORDER BY last_executed DESC SHOW EVENTS