MySQL学习笔记之触发器的使用

本篇文章通过学习《数据库系统概论》和《MySQL从入门到精通》,总结所得

今天学习MySQL中的触发器。触发器是用户定义在关系表上的一类由事件驱动的特殊过程,能够加强数据库表中数据的完整性约束和业务规则等。类似于现实中的监控一样,当检测到指定目标时,就会执行一些步骤(如:报警)。

创建触发器

基本语法:

create trigger 触发器名
before|after 触发事件 on 表名
for each row 
激活触发器后被执行的语句;

create trigger 是创建触发器的关键字;before | after关键字用来指定触发器的执行时间,before表示在触发事件之前执行触发器语句,after 表示在触发器事件之后执行触发器语句;触发事件 为触发器执行的条件,包含deleteinsertupdate语句;表名用来表示触发事件操作表的名字;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 触发器名;语句来删除指定触发器。

结束

本篇文章主要学习了 触发器的创建、触发器的查看、触发器的删除。内容比较多的是触发器的创建,它可以和 数据的增删改组合,来提高数据的完整性。但在使用触发器时也要慎重,因为在每次访问一个表时都可能触发一个触发器,这样会影响系统的性能。

本篇文章的学习到此为止,有不对的或不准确的地方欢迎在评论中指定出来。感谢你们的鼓励。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值