计算机二级MySQL笔记(第九章 事件)

事件调度器

  • 需要在指定时刻才被执行的某些特定任务就是事件。
  • 事件由一个特定的线程来管理,就是“事件调度器”。
  • 事件和触发器相似,都是在某些事情发生时启动,因此事件也可以称为临时触发器。
  • 事件是基于特定时间周期来触发执行,而触发器是基于某个表产生的动作来触发。
  • 事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务只能精确到每分钟执行一次。

在使用事件调度器之前,必须确保MySQL中event_scheduler已被开启,可以通过以下命令来查看、开启和关闭事件调度器:

--查看当前事件调度器状态
show variables like 'event_scheduler';select @@event_scheduler;

--开启事件调度器
set global event_scheduler = on;set global event_scheduler = 1;

--关闭事件调度器
set global event_scheduler = off;set global event_scheduler = 0;

创建事件

create event语句由两部分组成:事件调度(event schedule):表示事件的启动时间以及频率。事件动作(event action):时间启动时执行的代码,多条语句可以使用 begin…and 语句块。

--创建语法
create event [if not exists]
	event_name
	on schedule schedule
	[enabledisabledisable on slave]
	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} 

参数说明:

  • event_name:事件名
  • schedule:指定事件何时发生,或者每隔多久发生一次。包含at子句和every子句。
  • [enable丨disable丨disable on slave]:可选项,设定event的状态,默认enable:表示系统尝试执行这个事件; disable:关闭该事情,可以用alter修改。
--创建事件,用于每个月向表tb_student中插入一条数据,该事件开始于下个月,并在2016-12-31日结束
use db_school;

delimiter $$	--更改语句结束标志,因为默认是分号';',而event_body里有执行语句,避免错误执行
create event 
	event_insert
	on schedule every 1 month
		starts curdate() + interval 1 month
		ends '2016-12-31'
		do
		begin
			if year(curdate())<2013 then
				insert into tb_student
				values(null, '张三','男','1997-1-1','山西','汉','AC1301')
			end if;	
		end $$		--此处的符号不可省略,因为上面已经更改过默认结束标志符
delimiter ;		--恢复默认分号结束标志

修改事件

alter event 语句让一个事件关闭或再次活动。

--关闭该事件
alter event event_insert disable;

--开启该事件
alter event event_insert enable;

--修改事件的名字
alter event event_insert rename to e_insert;

删除事件

drop event [if exists] event_name;

课后习题

在这里插入图片描述
1、创建事件

use db_test;

delimiter $$;
create event
	event_delete
	on schedule every 1 month
		starts curdate() + interval 1 month
		ends '2016-12-31'
		do 
		begin
			delete from content where contentName='mysql初学者'; 
		end $$
delimiter ;

2、临时关闭事件

alter event event_delete disable;

3、再次开启事件

alter event event_delete enable;

4、修改事件名

alter event event_delete rename to e_delete;
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值