MYSQL中怎么实现一个事件调度器
发布时间:2022-01-21 12:45:28 所属栏目:MySql教程 来源:互联网
导读:这篇文章给大家介绍MYSQL中怎么实现一个事件调度器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 1.查看是否开启: mysql show variables like event_scheduler; +-----------------+-------+ | Variable_name | Value | +--------
这篇文章给大家介绍MYSQL中怎么实现一个事件调度器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 1.查看是否开启: mysql> show variables like 'event_scheduler'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | ON | +-----------------+-------+ 1 row in set (0.01 sec) mysql> select @@event_scheduler; +-------------------+ | @@event_scheduler | +-------------------+ | ON | +-------------------+ 1 row in set (0.00 sec) mysql> show processlist; +-------+-----------------+----------------+-----------+---------+------+------- ----------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+-----------------+----------------+-----------+---------+------+------- ----------------------+------------------+ | 1 | event_scheduler | localhost | NULL | Daemon | 24 | Waitin g for next activation | NULL | 2.语法 CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statement; schedule: AT TIMESTAMP [+ INTERVAL INTERVAL] | EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP] INTERVAL: quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND} 例: 每秒插入一条记录到数据表 USE test; CREATE TABLE aaa (timeline TIMESTAMP); CREATE EVENT e_test_insert ON SCHEDULE EVERY 1 SECOND5秒(天)后清空test表 CREATE EVENT e_test ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 SECOND DO TRUNCATE TABLE test.aaa; CREATE EVENT e_test ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa; 2008年5月23日9点39分20秒整清空test表 CREATE EVENT e_test ON SCHEDULE AT TIMESTAMP '2008-05-23 9:39:20' DO TRUNCATE TABLE test.aaa; 每天定时清空test表 CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY DO TRUNCATE TABLE test.aaa; 5天后开启每天定时清空test表 CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa; 这里5天也可以为0天,当时就开启清空表 每天定时清空test表,5天后停止执行 CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa; 该设置要求天数大于1,否则报错。而且创建不成功 5天后开启每天定时清空test表,一个月后停止执行 CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH DO TRUNCATE TABLE test.aaa;[ON COMPLETION [NOT] PRESERVE] 可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。 该事件会停止每隔一秒插入数据的事件,感觉这点上mysql做的还是有问题。 每天定时清空test表(只执行一次,任务完成后就终止该事件) CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY ON COMPLETION NOT PRESERVE DO TRUNCATE TABLE test.aaa; [ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。 [COMMENT ‘comment’]可以给该事件加上注释。 3 定时服务日常维护测试 5.4.1 修改事件(ALTER EVENT) ALTER EVENT event_name [ON SCHEDULE schedule] [RENAME TO new_event_name] [ON COMPLETION [NOT] PRESERVE] [COMMENT 'comment'] [ENABLE | DISABLE] [DO sql_statement] a、临时关闭事件 ALTER EVENT e_test DISABLE; b、开启事件 ALTER EVENT e_test ENABLE; c、将每天清空test表改为5天清空一次: ALTER EVENT e_test ON SCHEDULE EVERY 5 DAY; d、重命名事件并加上注释 alter event test.new_e_test rename to e_test comment 'e_test_cm'; 5.4.2 删除事件(DROP EVENT) 语法很简单,如下所示: DROP EVENT [IF EXISTS] event_name例如删除前面创建的e_test事件 DROP EVENT e_test;当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS DROP EVENT IF EXISTS e_test; 5.4.3 查看事件 a、查看一个event的详细信息可以用下面的视图: SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'e_test_insert' AND EVENT_SCHEMA = 'test'G; b、简要列出所有的event:show events 语法: SHOW EVENTS [FROM schema_name] [LIKE 'pattern' | WHERE expr] 格式化显示所有event SHOW EVENTSG 格式化显示test用户的event show events FROM test; c、查看event的创建信息 SHOW CREATE EVENT event_name show create event test.e_testG 关于MYSQL中怎么实现一个事件调度器就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。 (编辑:91站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |