MySql-触发器操作
触发器
触发器是一段与某个表相关的sql语句,会在某个时间点,满足某个条件后自动触发执行。
支持的时间点:时间发生前before和发生后after
支持的事件:
- update 可用OLD访问旧数据,NEW访问新数据
- delete 可用OLD访问新数据
- insert 可用NEW访问新数据
- 可以将NEW和OLD看做一个对象,其中封装了这列数据的所有字段
创建触发器
delimiter // 重定义行结束符
create trigger t_name t_time t_event on table_name for each row
begin
sql语句
end//
delimiter ;
# delimiter 用于修改默认的行结束符,由于在触发器中有多条sql语句,他们需要使用分号来结束,但是触发器是一个整体,所以需要先更换默认的行结束符
# t_name 触发器名
# t_time 时间点 before|after
# t_event 事件 delete|update|insert
# table_name 表名
查看触发器
show triggers; # 查看所有触发器
show create trigger 触发器名; # 查看创建指定的触发器语句
删除触发器
drop trigger 触发器名;
举例
#准备数据
CREATE TABLE cmd (
id INT PRIMARY KEY auto_increment,
USER CHAR (32),
priv CHAR (10),
cmd CHAR (64),
sub_time datetime, #提交时间
success enum ('yes', 'no') #0代表执行失败
);
#错误日志表
CREATE TABLE errlog (
id INT PRIMARY KEY auto_increment,
err_cmd CHAR (64),
err_time datetime
);
# 创建触发器
delimiter //
create trigger insert_t after insert on cmd for each row
begin
if new.success = 'no' then
insert into errlog(err_cmd,err_time) values(new.cmd,new.sub_time);
end if;
end//
delimiter ;
show triggers; # 查看所有的触发器
show create trigger insert_t; # 查看创建触发器insert_t的语句
drop trigger insert_t; # 删除触发器insert_t