MySQL触发器——介绍

        MySQL触发器,是一种与表操作有关的数据库对象,当触发器所在的表中出现指定的事件时,就会调用该对象,即表的操作事件会触发表上的触发器的执行。


语法:

create trigger trigger_name
trigger_time
trigger_event ON tbl_name
for EACH ROW
trigger_stmt 

CREATE trigger trigger_name BEFORE|AFTER trigger_EVENT     
ON TABLE_NAME FOR EACH ROW trigger_STMT

 这是一个 insert 的触发器


create trigger tri_insert_student after insert 
    on student for each row 
    update class set count=count+1 where class.id=new.class_id;

trigger_name  :触发器名称,由用户自己决定指定

trigger_time    :表示触发的时机,取值有BEFORE / AFTER

trigger_event  :表示触发的事件,取值有INSERT / UPDATE / DELETE

tbl_name        :表示在哪张表上建立触发器

trigger_stmt    :触发器的程序体,可以是一句SQL语句,也可以是begin 和 end 包含的多条语句

  • 一个表最多可以建立6个触发器,一个表上不能有相同类型的触发器。
  • BEFORE INSERT 、 BEFORE UPDATE  、 BEFORE DELETE  、AFTER INSERT  、 AFTER UPDATE  、 AFTER DELETE  

 trigger_event 触发事件

  •         MYSQL除了对 INSERT 、 UPDATE 、 DELETE等基本操作进行定义外,还定义了 LOAD DATA 和 REPLACE语句,这些语句也会引起以上六种触发器的触发。
  •         LOAD DATA 语句用于将一个文件装入数据表中,相当与一系列 insert 语句。
  •         REPLACE 当表中有 primary key 或者 unique 索引时,如果插入的数据和原来的 primary key 或者 unique 索引一致时,会先删除原有的数据,然后增加一条新的数据。它与 insert 很像。
  •         INSERT 有时候等于一条 delete 和 insert 语句。
  •         INSERT触发器:当插入某行数据触发,可能通过INSERT 、LOAD DATA  、 REPLACE 语句触发。
  •        UPDATE触发器:更改某行数据时触发,可能通过UPDATE语句触发。
  •        DELETE触发器:删除某行数据时触发,可能通过DELETE 、 REPLACE 语句触发。

DELIMITER new_delemiter 定界符、分隔符的意思。

DELIMITER $   —— 系统遇到 " ; " 不会认为是语句的结束,只有遇到 "$" 才会认为是语句的结束。

注意: 默认值是 ;   当修改完了,记得恢复默认值,记得修改回来

declare  定义局部变量 , 该变量只能在begin…… end 语句中使用

DECLARE var_name[,...] type [DEFAULT value]

declare int

触发器的执行顺序

一般来说,我们建立的数据库都是innoDB数据库,建立的表是事务性表,此时如果SQL语句触发器执行失败,MySQL会回滚事务有:

  1. 如果before 触发器执行失败,SQL无法正确执行
  2. SQL执行失败时,after触发器不会触发
  3. after触发器执行失败时,SQL会回滚

 NEW 、OLD

用来表示触发器所在的表中,触发了触发器的那一行数据

例如:

  • 在 insert 中 new 表示将要(before)或者已经(after)插入的数据。
  • 在 update 中 old 表示将要或者已经修改的原数据,new 表示将要或者已经修改为的新数据。
  • 在 delete 中 old 表示将要或者已经删除的数据。
  • 使用办法: new.columnName old.columnName
  • old 是只读的,NEW则可以在触发器中使用 set 赋值,这样不会再次触发触发器。简单的,我们可以统一在学生学号前面+年份(年份+学号)(set studentID="2023"+number)。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值