上一篇:12【事务的隔离级别】
下一篇:14【视图】
触发器是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作 。
触发器类型 | NEW和OLD的使用 |
---|---|
insert触发器 | NEW 表示将要或者已经新增的数据 |
update触发器 | OLD 表示修改之前的数据 , NEW 表示将要或已经修改后的数据 |
delete触发器 | OLD 表示将要或者已经删除的数据 |
使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容
create trigger trigger_name [after/before] [insert/update/delete]
on table_name
for each row
begin
......
end;
**after:**在插入表之后执行
**before:**在插入表之前执行(两种触发器效果一致)
建立一张日志表,存储日志
CREATE TABLE log (
`id` int(11) NOT NULL AUTO_INCREMENT,
`message` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB ;
create trigger test1 after insert
on student
for each row
begin
insert into log values(null,new.name,now());
end;
insert into student values(6,'王八',3);
select * from log; -- 查看日志表
create trigger test2 after update
on student
for each row
begin
insert into log values(null,concat('之前的值: ',old.name,';之后的值: ',new.name),now());
end;
update student set name='王巴' where id=6;
select * from log; -- 查看日志表
create trigger test3 after delete
on student
for each row
begin
insert into log values(null,concat('删除的值: ',old.name),now());
end;
delete from student where id=6;
select * from log; -- 查看日志表
show triggers;
drop trigger trigger_name;
-- 示例
drop trigger test1;