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