初学mysql(八)-数据库之触发器

上一篇博客讲了视图,包括视图的创建、修改、更新、删除、查看等操作。这一篇博客我来说说mysql数据库中的触发器(trigger)。

定义:触发器是由事件触发某个操作。事件包括insert事件、update事件、delete事件。它是一种特殊的存储过程,它的执行不是由程序调用,也不是人为的手动执行,而是通过事件进行触发来执行的。当对一个表进行插入、删除、修改等操作事件时,触发器就会被激活进行执行。触发器经常用来加强数据的完整性约束和业务规则等。类似于约束但是比约束更灵活更加强大。

触发器的优点如下:触发程序的执行是自动的,当对触发程序相关表的数据做出相应的修改后立即执行;触发程序可以通过数据库中相关的表进行层叠修改另外的表;触发程序可以实施比foreign key约束、check约束更为复杂的检查和操作。

实例:创建t_user表 ,字段:id,userName,job,jobTypeId;创建t_jobType表,字段:id,jobTypeName,jobNum;创建表t_log:字段id,t_time;创建表t_event:字段id,t_context;

1:创建只有一个执行语句的触发器:事件:创建一个触发器使得在t_user表中增加一条数据然后t_jobType表中的jobNum数值+1:

 触发器:        

create trigger trig_user 
after insert on t_user 
for each row 
update t_jobType set bookNum = bookNum + 1 where new.jobTypeId = t_jobType.id;

触发事件:

insert into t_user values(null, '川普', '总统', 1);

2:创建有多个语句的触发器:事件:创建一个触发器在t_user表中删除一条数据然后再t_jobType表中的jobNum数值-1,在t_log表中插入辞职时间,在t_event表中插入辞职事件。触发器:

delimiter && 
       create trigger trig_event 
       after delete on t_user 
       for each row 
       begin 
          update t_jobType set jobNum = jobNum - 1 where old.jobTypeId = t_jobType.id; 
          insert into t_log values(null, now());
          insert into t_event values(null, '一个员工辞职了'); 
       end 
&& delimiter ;

触发事件:

delete from t_user where id = 1;

查看触发器有两种方式:

show triggers;

第二种通过第三方AAP查看触发器结构。

删除触发器:

drop trigger trig_event;

总结:old关键字用在删除,修改操作中,new关键字用在增加,修改操作中。delimiter 后面跟一个结束符表示声明一个结束标识符,在执行遇到这个标志符时程序才结束。

创建只有一个执行语句的触发器:     

create trigger 触发器名字 
before|after 触发事件(insert、deleter、update) on 表名 
for each row 

SQL执行语句;

创建一个有多个执行语句的触发器: 

delimiter && 
     create trigger 触发器名字 
     before|after 触发事件(insert、delete、update) on 表名
     for each row 
     begin 
        SQL执行语句 
     end 
&& delimiter ;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值