MYSQL事件的使用、创建事件Create、查看事件、修改时间、删除事件

文章目录

      • 事件
          • 创建事件
          • 查看事件
          • 修改事件
          • 删除事件

事件

事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。

优点:一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。

​ 可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。

缺点:定时触发,不可以调用。

创建事件

1)向导创建

选择对应数据库下事件->右键新建事件>填写事件信息->保存->填写事件名

  1. 使用SQL创建

语法:

CREATE
  [DEFINER = { user | CURRENT_USER }] 
  EVENT 
  [IF NOT EXISTS] 
  event_name 
  ON SCHEDULE schedule 
  [ON COMPLETION [NOT] PRESERVE] 
  [ENABLE | DISABLE | DISABLE ON SLAVE] 
  [COMMENT 'comment'] 
  DO event_body; 
   
schedule: 
  AT timestamp [+ INTERVAL interval] ... 
 | EVERY interval 
  [STARTS timestamp [+ INTERVAL interval] ...] 
  [ENDS timestamp [+ INTERVAL interval] ...] 
   
interval: 
  quantity {
    YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | 
       WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | 
       DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

名词解释:

子句 说明
DEFINER 可选,用于定义事件执行时检查权限的用户
IF NOT EXISTS 可选项,用于判断要创建的事件是否存在
EVENT event_name 必选,用于指定事件名,event_name的最大长度为64个字符,如果为指定event_name,则默认为当前的MySQL用户名(不区分大小写)
ON SCHEDULE schedule 必选,用于定义执行的时间和时间间隔
ON COMPLETION [NOT] PRESERVE 可选,用于定义事件是否循环执行,即是一次执行还是永久执行,默认为一次执行,即 NOT PRESERVE
ENABLE | DISABLE | DISABLE ON SLAVE 可选项,用于指定事件的一种属性。其中,关键字ENABLE表示该事件是活动的,也就是调度器检查事件是否必选调用;关键字DISABLE表示该事件是关闭的,也就是事件的声明存储到目录中,但是调度器不会检查它是否应该调用;关键字DISABLE ON SLAVE表示事件在从机中是关闭的。如果不指定这三个选择中的任意一个,则在一个事件创建之后,它立即变为活动的。
COMMENT ‘comment’ 可选,用于定义事件的注释
DO event_body 必选,用于指定事件启动时所要执行的代码。可以是任何有效的SQL语句、存储过程或者一个计划执行的事件。如果包含多条语句,可以使用BEGIN…END复合结构

实例:

drop table if exists events_list;  

create table events_list(event_name varchar(20) not null, event_started timestamp not null);


create event event_now 
on schedule 
at now() 
do insert into events_list values('event_now', now());

看插入表的数据是没有的,就需要查看调度器是否启动,

MySQL事件调度器event_scheduler负责调用事件,它默认是关闭的。这个调度器不断地监视一个事件是否要调用, 要创建事件,必须打开调度器.

//查看状态
show variables like '%event_scheduler%'
结果:
event_scheduler	OFF
//开启调度器 (其中一个语句即可)
SET GLOBAL event_scheduler = ON; 
SET @@global.event_scheduler = ON; 
SET GLOBAL event_scheduler = 1; 
SET @@global.event_scheduler = 1;
//查看调度线程
show processlist
//关闭调度器(其中一个语句即可)
SET GLOBAL event_scheduler = OFF; 
SET @@global.event_scheduler = OFF; 
SET GLOBAL event_scheduler = 0; 
SET @@global.event_scheduler = 0;
//在创建一个
create event test.event_hour
on schedule 
every 1 hour 
do insert into events_list values('event_now', now());

查看事件

1)选中想要查看的事件->设计事件

2) sql 查看

//查看当前库事件
show events;
// 查看所有事件
SELECT * FROM INFORMATION_SCHEMA.EVENTS
select * from mysql.event

// 可以根据名称查看所有自定义的存储,支持模糊查询
SHOW events where Db ="py_etl"
show events where name like 'test_event_hour';
select * from mysql.event where name like 'test_event_hour';
SELECT * FROM INFORMATION_SCHEMA.EVENTS where EVENT_NAME  like 'test_event_hour'

以上参数说明如下表所示:

参数名 说明
EVENT_CATALOG 事件存放目录,一般情况下,值为 def,不建议修改
EVENT_SCHEMA 事件所在的数据库
EVENT_NAME 事件名称
DEFINER 事件的定义者
TIME_ZONE 事件使用的时区,默认是 SYSTEM,不建议修改
EVENT_BODY 一般情况下,值为 SQL,不建议修改
EVENT_DEFINITION 该事件的内容,可以是具体的 INSERT 等 SQL,也可以是一个调用的存储过程
EVENT_TYPE 事件类型,这个参数比较重要,在定义时指定 有两个值:RECURRING 和 ONE TIME RECURRING 表示只要符合条件就会重复执行,RECURRING 类型的事件一般为 NULL,表示该事件的预计执行时间 ONE TIME 只会调用 EXECUTE_AT,针对 one-time 类型的事件有效
INTERVAL_VALUE 针对 RECURRING 类型的事件有效,表示执行间隔长度
INTERVAL_FIELD 针对 RECURRING 类型的事件有效,表示执行间隔的单位,一般是 SECOND,DAY 等值,可参考创建语法
SQL_MODE 当前事件采用的 SQL_MODE
STARTS 针对 RECURRING 类型的事件有效,表示一个事件从哪个时间点开始执行,和 one-time 的 EXECUTE_AT 功能类似。 为 NULL 时表示一符合条件就开始执行
ENDS 针对 RECURRING 类型的事件有效,表示一个事件到了哪个时间点后不再执行,如果为 NULL 就是永不停止
STATUS 一般有三个值,ENABLED、DISABLED 和 SLAVESIDE_DISABLED
ON_COMPLETION 只有两个值,PRESERVE 和 NOT PRESERVE
CREATED 事件的创建时间
LAST_ALTERED 事件最近一次被修改的时间
LAST_EXECUTED 事件最近一次执行的时间,如果为 NULL 表示从未执行过
EVENT_COMMENT 事件的注释信息
ORIGINATOR 当前事件创建时的 server-id,用于主从上的处理,比如 SLAVESIDE_DISABLED
CHARACTER_SET_CLIENT 事件创建时的客户端字符集
COLLATION_CONNECTION 事件创建时的连接字符校验规则
DATABASE_COLLATION 事件创建时的数据库字符集校验规则
修改事件

1)选中想要查看的事件->设计事件->填写事件信息->保存

2) sql 查看

//更改计划,要使事件每2分钟运行一次,请使用以下语句:
ALTER EVENT test_event_hour ON SCHEDULE EVERY 2 MINUTE;
//更改事件主体
ALTER EVENT `test_event_hour` 
DO insert into events_list values('event', now());
//禁用事件
ALTER EVENT `test_event_hour` DISABLE;
//启用事件
ALTER EVENT `test_event_hour` ENABLE;
//重命名事件,MySQL中不为提供RENAME EVENT语句。不过可以使用ALTER EVENT来重命名现有事件,如下所示:
ALTER EVENT `test_event_hour` RENAME TO test_event;
// 请注意,ALTER EVENT语句仅应用于现有事件。如果尝试修改不存在的事件,MySQL将发出一个错误消息,因此,应该先使用SHOW EVENTS语句来检查事件是否存在,然后再更改它。
删除事件

1)选中想要查看的事件->删除事件

2) sql 删除

DROP EVENT [IF EXISTS] event_name;

你可能感兴趣的:(学习)