13【触发器】

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 13【触发器】,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文


上一篇12【事务的隔离级别】

下一篇14【视图】

目录【MySQL零基础系列教程】



13.1 触发器

13.1.1 触发器介绍

触发器是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作 。

  • MySQL中触发器共有3种:
触发器类型 NEW和OLD的使用
insert触发器 NEW 表示将要或者已经新增的数据
update触发器 OLD 表示修改之前的数据 , NEW 表示将要或已经修改后的数据
delete触发器 OLD 表示将要或者已经删除的数据

使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容

13.1.2 触发器使用

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 ;
  • insert触发器
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;  -- 查看日志表
  • update触发器
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;  -- 查看日志表
  • delete触发器
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;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131698.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!