MySQL——触发器trigger详解

1、什么是触发器

  触发器(trigger):触发器是一种特殊的事务可以监视某种数据的操作(insert update delete)并触发相关操作(insert update delete),它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发。

2、应用场景

1)向一张表中添加或者删除记录时,需要在相关表中进行同步操作

例如:
1、库存表
2、订单表

下一个订单 库存中对于的商品需要减少一个

2)某表的某列数据的值和其他表的中的某些数据有关系

例如:
1、用户表
2、信贷表
用户不停的借款 那么我们需要通知 信贷表是否继续放贷

3)当需要对某张表进行跟踪的时候

例如:
1、订单表
2、后台处理
用户下了订单以后 需要通知 相关人员处理该订单

3、 触发器的优缺点

  • 优点
  • SQL触发器提供了检查数据完整性的替代方法。
  • SQL触发器可以捕获数据库层中业务逻辑中的错误。
  • SQL触发器提供了运行计划任务的另一种方法。通过使用SQL触发器,您不必等待运行计划的任务,因为在对表中的数据进行更改之前或之后自动调用触发器。
  • SQL触发器对于审核表中数据的更改非常有用。
  •  缺点
  • SQL触发器只能提供扩展验证,并且无法替换所有验证。一些简单的验证必须在应用层完成。 例如,您可以使用JavaScript或服务器端使用服务器端脚本语言(如JSPPHP,ASP.NET,Perl等)来验证客户端的用户输入。
  • 从客户端应用程序调用和执行SQL触发器不可见,因此很难弄清数据库层中发生的情况。
  • SQL触发器可能会增加数据库服务器的开销。

4、触发器创建语句

CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt

trigger_name:触发器的名称
tirgger_time:触发时机,为before或者after
trigger_event:触发事件,为INSERT、DELETE或者UPDATE
tb_name:表示建立触发器的表名,就是在哪张表上建立触发器
trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句

create trigger + 触发器名称
after/before(触发时间)
insert/update/delete(监视事件)
on 表名(监视地址)
for each row(触发器的程序体)
begin
sql1;
...
sqlN;
end


删除触发器:
Drop trigger 触发器名称

5、编程实例

1、为student的班级id列增加外键约束
    ALTER TABLE xmcc_student ADD CONSTRAINT cid_key FOREIGN KEY(s_cid)
REFERENCES xmcc_class(c_id);

2、现在有了外键约束,如果我们删除其中.net班级,因为外键存在无法删除

3、使用触发器,当删除某个班级的时候触发修改当前班级学生的班级id为null,
    
#创建触发器来保证数据的完整性
CREATE TRIGGER trigger_test  #触发器名称为trigger_test
BEFORE DELETE  #在删除前
ON xmcc_class FOR EACH ROW  #对xmcc_class每一行
UPDATE xmcc_student SET  #修改xmcc_student
#old表示删除前的行数据 如果是修改的old表示修改前 new表示修改后
s_cid=NULL WHERE s_cid=old.c_id

4、查看结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值