在数据库管理中,经常需要周期的执行某一个命令或者SQL语句来完成某项工作,MySQL在5.1以后增加了事件调度器功能,可以很方便的实现定时任务,定期执行指定的命令,比如可以定期清理垃圾数据,定期统计一些信息等。
MySQL事件类似于触发器,不同的是触发器是由特定的数据库操作(增、删、改)触发,事件是由“时间”触发,每隔指定的时间间隔会自动触发。
要使用MySQL的事件,需要查看用户是否有权限:
上图显示当前用户 "root" 拥有创建及修改事件的权限,此外,还要查看事件是否开启:
SHOW VARIABLES like 'event_scheduler'
这里VALUE的值是 OFF ,说明事件没有开启,需手动开启事件,开启的语句是:
SET GLOBAL event_scheduler=on
然后我们再查看:
这时虽然显示是开启的,不过这只是暂时的,重启MySQL后,又会恢复到关闭状态,如果想一直开启事件,需在MySQL的配置文件(Windows系统是my.ini,Linux系统是my.cnf)中加一句话:
event_scheduler=on
添加这句话之后,重启MySQL,之后事件就一直处于开启状态了。
创建事件的语句是:
其中 :
event_name 是事件的名字;
schedule 是事件的时间间隔;
ON COMPLETION [NOT] PRESEVER 可选项,是定义事件是否循环执行( 即执行一次,还是循环执行),默认执行一次,即 NOT PRESEVER;
ENABLE | DISABLE | DISABLE ON SLAVE 可选项,用来定义事件创建后是否为活动的,默认为活动的;
comment 可选,用来添加备注;
event_body 事件的主体代码;
下面来创建一个事件,创建之前,先建立一个简单的会用到的表:
下面创建一个事件,每隔5秒向刚刚新建的表里插入一条数据:
然后我们查看数据,是否为间隔5秒:
正如我们所料,插入的数据间隔5秒。事件创建之后还可以用 ALTER 语句进行修改,语法跟创建时一样,这里就不再重复说明,下面我们就把这个事件修改为间隔10秒插入一次数据:
上面的结果显示,确实被改成了间隔10秒。创建的事件还可以用 ALTER 语句改变状态,开启或者关闭,可以用下面的语句把这个事件暂时关闭:
开启的话是:ALTER EVENT event_name ENABLE 。
也可以删除创建的事件,跟删除表、试图、存储过程之类的一样,删除事件也用DROP语句:
在实际应用中,通常会把复杂的SQL语句封装在一个存储过程中,这样在事件执行的时候只需要做一个简单的调用。另外,如果一个事件执行需要比较长的时间,而事件的时间间隔又很短,可能会发生上一个事件还没执行完,又到了下一个事件开始的时间点,这一点需要注意。
不懂的留言,每天一篇分享,玩转我们共同的爱好!
你也来投搞!