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
原文地址:https://www.cnblogs.com/863652104kai/p/11197564.html