计算机二级MySQL笔记(第八章 触发器)

触发器是一个被指定关联到一个表的数据库对象,当对一个表的特定事件出现时,它将会被激活。触发器可以实现比约束更复杂的数据约束。

创建触发器

  • 触发器必须引用永久性表,不能是临时表或视图;
  • 同一个表不能拥有两个相同触发时刻和事件的触发器;
  • 每个表最多支持6个触发器,即INSERT、UPDATE、DELETE的之前和之后;
--创建语法
create 
	trigger trigger_name trigger_time trigger_event
	on tb_name for each row trigger_body;
	
--参数说明:	
--trigger_name: 触发器名称
--trigger_time: 触发器被触发的时刻,有两个选项 before 和 after
--trigger_event: 激活触发器的事件,即insert、update、delete语句
--for each row: 指定触发事件影响的每一行都要激活触发器
--trigger_body: 触发器被激活时,将要执行的SQL语句;如果执行多个语句,可使用 begin...end 复合语句结构 
--创建一个触发器,每次插入数据时,将变量str修改为‘one student added’
create trigger tb_student_insert_trigger after insert
	on tb_student for each row 
	set @str='one student added'; 

查看触发器

--查看数据库中已有的的触发器,注意这里是数据库,不是表。
show triggers fromin db_name;

删除触发器

--删除上例创建的触发器
drop trigger if exists db_school.tb_student_insert_trigger;

使用触发器

  • MySQL目前仅支持DML触发器,即INSERTUPDATEDELETE触发器(书中说的是5.5版本,可以查看官方手册)。
  • 触发器中有两种虚拟表:NEW表和OLD表(不区分大小写)

1、insert 触发器中可以引用一个名为 new 的虚拟表来访问被插入的行;
2、delete 触发器中可以引用一个名为 old 的虚拟表来访问被删除的行;
3、update 触发器中可以引用一个名为 old 的虚拟表访问更新前的值,也可以引用一个名为 new 的虚拟表访问更新后的值;

  • 当触发器涉及对表自身的更新操作时,只能使用 before update 触发器,而 after update 触发器会报错。
  • 在触发器的执行过程中,是先执行 before 触发器,再执行 after 触发器。
--创建触发器,当插入数据时,将str变量值设置为新插入学生的学号
create trigger tb_student_insert_trigger after insert
	on tb_student for each row 
	set @str=new.studentNo;

--创建触发器,每次更新表时,该表中 nation 列的值设置为 native 列的值
create trigger tb_student_update_trigger before update
	on tb_student for each row
	set new.nation = old.native;

课后习题

在这里插入图片描述
在这里插入图片描述

1、创建触发器content_delete_trigger

create trigger db_test.content_delete_trigger after update
on content for each row set @str='old content deleted!';

2、创建触发器tb_score_insert_trigger

create trigger db_score.tb_score_insert_trigger after insert
on tb_score for each row set @str='new score record added!';

3、创建触发器tb_score_update_trigger

create trigger db_score.tb_score_update_trigger before update
on tb_score for each row set new.score = old.score + 1;

4、删除触发器tb_score_update_trigger

drop trigger if exists db.score.tb_score_update_trigger;
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值