Mysql数据库事件使用与示例
Posted 沸水香茶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql数据库事件使用与示例相关的知识,希望对你有一定的参考价值。
事件(event)是mysql在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。
事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。
事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。
2 事件的优缺点
2.1 优点
一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。
可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。
2.2 缺点
定时触发,不可以调用。
3 事件创建
一条create event语句创建一个事件。每个事件由两个主要部分组成,第一部分是事件调度(event schedule),表示事件何时启动以及按什么频率启动,第二部分是事件动作(event action ),这是事件启动时执行的代码,事件的动作包含一条SQL语句,它可能是一个简单地insert或者update语句,也可以使一个存储过程或者benin...end语句块,这两种情况允许我们执行多条SQL。
一个事件可以是活动(打开)的或停止(关闭)的,活动意味着事件调度器检查事件动作是否必须调用,停止意味着事件的声明存储在目录中,但调度器不会检查它是否应该调用。在一个事件创建之后,它立即变为活动的,一个活动的事件可以执行一次或者多次。
一、 如果开启事件
在使用事件这个功能,首先要保证你的mysql的版本是5.1以上,然后还要查看你的mysql服务器上的事件是否开启。
查看事件是否开启,使用如下命令查看:
SHOW VARIABLES LIKE \'event_scheduler\';
通过动态参数修改 SET GLOBAL event_scheduler = ON;
更改完这个参数就立刻生效了 注意:还是要在my.ini 中添加event_scheduler=ON。因为如果没有添加的话,mysql重启事件又会回到原来的状态了。
创建语句方式:
create event [ if not exists ] EVENT_NAME
on schedule SCHEDULE
[ on completion [ not ] preserve ] //not即计划任务执行完毕后自动删除该事件,默认操作。
[ enable | disable ]
[ comment COMMENT ]
do SQL;
注释:所有中括号([])中的内容为可写选项(下同)
EVENT_NAME:你自己想要设置的事件名称
SCHEDULE : 方式一: at TIMESTAMP(必须是\'2017-09-11 17 :00:00\' 这种格式)
方式二: every INTERVAL(整数值) UNIT(时间单位,可以是:YEAR | QUARTER | MONTH | DAY | HOUR| MINUTE |WEEK | SECOND | YEAR_MONTH |DAY_HOUR |DAY_MINUTE|DAY_SECOND| HOUR_MINUTE |HOUR_SECOND| MINUTE_SECOND)
[ starts TIMESTAMP(同上) [ + interval(必须写) INTERVAL(整数值) UNIT(同上) ] ]
[ ends TIMESTAMP(同上) [ + interval(必须写) INTERVAL(整数值) UNIT(同上) ] ]
COMMENT:填写的注释,utf8字符集时不能是中文。长度也不能超过64个字节。
SQL:需要执行的sql语句。(可以是存储过程)
注意:
通过show events只能查看当前库中创建的事件
事件执行完即释放,如立即执行事件,执行完后,事件便自动删除,多次调用事件或等待执行事件可以查看到。
如果两个事件需要在同一时刻调用,mysql会确定调用他们的顺序,如果要指定顺序,需要确保一个事件至少在另一个事件1秒后执行
对于递归调度的事件,结束日期不能在开始日期之前。
select可以包含在一个事件中,然而他的结果消失了,就好像没执行过。
4 事件修改
更改事件的语法
ALTER
EVENT event_name
[ON SCHEDULE schedule]
[ON COMPLETION [NOT] PRESERVE]
[RENAME TO new_event_name]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT \'comment\']
[DO event_body]
注意:这里的大写是必须这么写的,小写同创建的代名词一样。
5 事件删除
DROP EVENT [IF EXISTS] event_name(代名词)
以上是关于Mysql数据库事件使用与示例的主要内容,如果未能解决你的问题,请参考以下文章
使用 SQL 查询(MySQL 数据库)获取不同项目的最新“事件”