计算机二级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 from丨in db_name;

删除触发器

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

使用触发器

    MySQL目前仅支持DML触发器,即INSERT、UPDATE、DELETE触发器(书中说的是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;
经验分享 程序员 微信小程序 职场和发展