mysql 触发器 获取时间,Mysql时间触发器EVENT

Mysql属于中小型数据库系统,它的事件调度器Event Scheduler是在mysql 5.1才开始引入。事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功能。事件调度器是定时触发执行的,在这个角度上也可以称作是"临时的触发器"。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。

开启event_scheduler(也可以设置为on):set global event_scheduler = 1;

要查看当前是否已开启事件调度器,可执行如下SQL:SHOW VARIABLES LIKE 'event_scheduler';

SELECT @@event_scheduler;

SHOW PROCESSLIST;

创建事件(CREATE EVENT):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}

[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE.[ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。

例1:每分钟执行一次:CREATE EVENT MyEvent

ON SCHEDULE EVERY 1 MINUTE

DO (SQL语句)

例2:每天固定时间执行某存储过程:CREATE EVENT [IF NOT EXISTS] MyEvent

ON SCHEDULE EVERY 1 DAY

STARTS TIMESTAMP '2009-12-18 02:58:00' /× 注意时区设置,默认非中国时区 ×/

[ON COMPLETION PRESERVE ENABLE]

DO CALL MyProcedure();

例3:5天后清空test表:CREATE EVENT e_test

ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY

DO TRUNCATE TABLE test;

例4:每天定时清空test表,5天后停止执行:CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY

DO TRUNCATE TABLE test;

修改事件(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]

例1:临时关闭事件:ALTER EVENT e_test DISABLE;

例2:开启事件:ALTER EVENT e_test ENABLE;

例3:将每天清空test表改为5天清空一次:ALTER EVENT e_test ON SCHEDULE EVERY 5 DAY;

删除事件(DROP EVENT):DROP EVENT [IF EXISTS] event_name

特别注意:Mysql定时任务使用过程中,经常会遇到任务没有按预定时间运行的情况,除EVENT本身有问题外,还有可能是Mysql重启的问题(Mysql默认event_scheduler处于关闭状态,每次Mysql重启后,event_scheduler都是关闭的,自然所有EVENT都不执行)。解决方法:1.每次重启后,都运行一次“set global event_scheduler = 1”;2.更改Mysql的my.ini(linux系统为my.cnf)文件,在“[mysqld]”之后追加一行“event_scheduler = 1”(去掉双引号)即可;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值