MySQL之触发器(高级)

MySQL之触发器

一 触发器的概念及作用

1 概念
触发器是与表有关的数据库对象,指在insert、update、delete前后触发并执行的触发器中定义的语句集合。
2 作用
触发器可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。
使用别名 OLD 和 NEW 来引用触发器中发送变化的记录内容,现在触发器还只支持行级触发,不支持语句级触发。对insert、update、delete的NEW和OLD的使用如下图所示:
在这里插入图片描述

二 触发器的创建

1 语法

create trigger 触发器名
before/after insert/update/delete
on 表名
[ for each row ] – 行级触发器
begin
trigger_stmt ;-- 增删改的SQL语句
end$

2 案例
通过触发器记录 emp 表的数据变更日志 , 包含增加, 修改 , 删除 ;

-- 首先创建一张日志表 : 
create table emp_logs(
  id int(11) not null auto_increment,
  operation varchar(20) not null comment '操作类型, insert/update/delete',
  operate_time datetime not null comment '操作时间',
  operate_id int(11) not null comment '操作表的ID',
  operate_params varchar(500) comment '操作参数',
  primary key(`id`)
)engine=innodb default charset=utf8;

(1)insert型触发器

create trigger emp_logs_delete_trigger
after delete 
on emp 
for each row 
begin
  insert into 
  emp_logs (id,operation,operate_time,operate_id,operate_params)
  values(null,'delete',now(),old.id,
         concat('删除前(id:',old.id,', name:',old.name,', age:',old.age,', salary:',old.salary,')')
        );                                                                      
end $

(2)update型触发器

create trigger emp_logs_update_trigger
after update 
on emp 
for each row 
begin
  insert into 
  emp_logs (id,operation,operate_time,operate_id,operate_params)
  values(null,'update',now(),new.id,
         concat(
             '修改前(id:',old.id,', name:',old.name,', age:',old.age,', salary:',old.salary,') , 
             修改后(id',new.id, 'name:',new.name,', age:',new.age,', salary:',new.salary,')'
         		)
        );                                                                      
end$

(3)delete型触发器

create trigger emp_logs_delete_trigger
after delete 
on emp 
for each row 
begin
  insert into 
  emp_logs (id,operation,operate_time,operate_id,operate_params)
  values(null,'delete',now(),old.id,
         concat('删除前(id:',old.id,', name:',old.name,', age:',old.age,', salary:',old.salary,')')
        );                                                                      
end $

(4)测试

insert into emp(id,name,age,salary) values(null, '光明右使',33,3200)$

update emp set age = 39 where id = 3$

delete from emp where id = 7$

三 查看触发器

语法:执行 show triggers 命令查看触发器的状态、语法等信息。语法结构

show triggers

四 删除触发器

(1)语法:没有指定 schema_name,默认为当前数据库

drop trigger [schema_name.]trigger_name

猜你喜欢

转载自blog.csdn.net/hcyxsh/article/details/114793341
今日推荐