1、事件
事件(event)是MySQL在相应时刻调用存储过程的数据库对象。可以调用一次,也可以周期性的调用。由特定线程“事件调度器”来控制。默认是关闭的,打开后才能使用。
查看事件调度器是否打开:show varables like 'event_scheduler'—off为关,on为开
命令行开启事件调度器
set global event_scheduler=on; set global event_scheduler=1;
set @@global.event_scheduler=on; set @@global.event_scheduler=1;
修改配置文件my.ini默认开始事件调度器
event_scheduler=1; event_scheduler=on;
命令行关闭事件调度器或修改配置文件为0或off。
查看调度器执行情况:show processlist;
1.1、创建事件
create event语句创建一个事件,每个事件主要有两部分组成。
第一部分是事件(eventschedule),表示启动的时间或频率。
第二部分是动作(调度 event action),事件执行的代码。
语法: create event 事件名称
on schedule at某个时间点或every时间点或时间段
do 执行的代码;
例如:
create event e_minute #创建名字
on schedule every 1 minute #设置每分钟执行一次
starts date_add(now(),interval 10 minute) #设置开始时间为现在的时间十分中之后
do call myproc(); #执行对应的存储过程
查看正在执行的事件:show events;
1.2、修改事件
alter event event_name on schedule at|every do event_body;
1.3、删除事件
drop event (if exists) event_name;
2、触发器
触发器事件是指当数据库表进行insert、update、delete操作或视图的操作及对数据库的启动关闭等事件。
2.1、创建触发器
语法格式:create trigger 触发器名称
before|after insert|update|delete on 表名
for each row +语句块 end;
在DML语句中不能使用控制语句commit,rollback等事务命令。
insert触发器
create trigger 触发器名称
before insert on 表名
for each row
begin
if 条件 then
signal sqlstate 'HY000' set message_text = '提示内容'
end if;
end;
update触发器
create trigger 触发器名
before update on 表名
for each row
begin
if new.列名<old.列名 then #new指更新后的值,old指更新前的值。
signal sqlstate 'HY000' set message_text = '需要提示的内容'
end if;
end;
delete触发器
create trigger 触发器名称
after delete on 表名
for each row
begin
#需要执行的内容
end;
查询触发器
查询触发器sql命令:SELECT * FROM information_schema.`TRIGGERS`
删除触发器
删除触发器sql命令:drop trigger trigger_name;
触发器作用:数据确认、实施复杂的安全性检查、做审计跟踪表上的所有数据操作、数据的备份和同步。