本篇文章通过学习《数据库系统概论》和《MySQL从入门到精通》,总结所得
今天学习MySQL中的触发器
。触发器是用户定义在关系表上的一类由事件驱动的特殊过程,能够加强数据库表中数据的完整性约束和业务规则等。类似于现实中的监控一样,当检测到指定目标时,就会执行一些步骤(如:报警)。
创建触发器
基本语法:
create trigger 触发器名
before|after 触发事件 on 表名
for each row
激活触发器后被执行的语句;
create trigger
是创建触发器的关键字;before | after
关键字用来指定触发器的执行时间,before
表示在触发事件之前执行触发器语句,after
表示在触发器事件之后执行触发器语句;触发事件
为触发器执行的条件,包含delete
,insert
,update
语句;表名
用来表示触发事件操作表的名字;for each row
设置触发器的类型为行级触发器。
如果被执行的语句
是多条,需要包含在begin ... end
之间。如:
create trigger 触发器名
before|after 触发事件 on 表名
for each row
begin
语句1;
语句2;
...
语句n;
end;
每条语句之间使用;
隔开。但是由于创建触发器语句的结束符也是;
,所以需要通过关键字delimiter
,将结束符设置为其他符号。下面是多条语句创建触发器的完整过程:
delimiter $$ # 把结束符 设置为`$$`
create trigger 触发器名
before|after 触发事件 on 表名
for each row
begin
语句1;
语句2;
...
语句n;
end $$ # 使用结束符
delimiter ; # 把结束符还原为默认的`;`
实例:创建一个触发器,当更新学生成绩时,把成绩操作记录存入表sc_u(s_id, c_id, old_grade, new_grade)中。代码如下:
delimiter $$
create trigger sc_t
after update on tab_sc
for each row
begin
insert into sc_u (s_id, c_id, old_grade, new_grade)
values ( old.s_id, old.c_id, old.sc_grade, new.sc_grade);
end $$
delimiter ;
在上述代码中使用了 old.列名
和new.列名
两个标识符,用于标识不同状态下的列名;old.列名
表示在更新或删除之前引用行的列;new.列名
表示引用要插入的新行的列或更新后的现有行的列。所以在insert
语句中new.列名
是合法的,在delete
语句中old.列名
是合法的,在update
语句中old.列名
和new.列名
都合法。
查看触发器
语法 | 描述 |
---|---|
show triggers | 显示所有触发器的信息 |
show create trigger 触发器名 | 查看指定触发器的定义信息 |
删除触发器
使用drop trigger 触发器名;
语句来删除指定触发器。
结束
本篇文章主要学习了 触发器的创建、触发器的查看、触发器的删除。内容比较多的是触发器的创建,它可以和 数据的增删改组合,来提高数据的完整性。但在使用触发器时也要慎重,因为在每次访问一个表时都可能触发一个触发器,这样会影响系统的性能。
本篇文章的学习到此为止,有不对的或不准确的地方欢迎在评论中指定出来。感谢你们的鼓励。