MySQL:触发器

【触发器】与 table 有关的命名数据库对象,当 table 中出现特定事件时,会激活该对象。

            监听数据操作:在当前的表中,设置一个对每行数据的一个监听器,监听相关事件。

每当事务发生时,会执行一段由 SQL 完成的功能代码。

【元素】事件、执行代码。

1. 创建触发器

create trigger 名字 事件 执行代码;

【事件】增 insert 、删 delete 、改 update。

           事件的时机:after、before。

           由此组成了 6 种事件。

           即 需要交代清楚 **表 **时机 **动作。

create trigger salary after update on czbk_stu
for each row
update class set cz_money=cz_money + 20 ;  //可执行语句

【tip】当对表czbk_stu执行了update操作时,会启动触发器,执行表class的update操作,给每一行都加20.

2. 触发、触发程序:

    当执行如下代码时,即触发程序:

1 update czbk_stu set stu_money=stu_money-20;

【注意】1) 触发器不能重名;

            2) 目前 MySQL 只支持一类事件设置一个触发器;

3. 管理触发器

【删除】 drop trigger trigger_name ;

【查看】 show create trigger trigger_name;

【tip】上述例子中的20可以实时变化,利用 old 和 new 关键字来完成:

1 drop trigger salary;
2 create trigger salary after undate on czbk_stu
3 for each row
4 update class set cz_money= cz_money+(old.stu_money-new.stu_money);

//用上述标黄的表达式代替最初直接写的样式,可以根据表 czbk_stu 中,字段stu_money的变化,灵活地改变表 class 中的 cz_money 字段的值。

// 注意:old 和 new 都指的是引起触发的表中的字段,在该例子中指的是 表 czbk_stu。

【思考】对于操作 insert 而言,不能使用old(因为创建数据前, 没有任何数据,谈不上 old);

操作 delete 不能使用 new

4. 若一个触发程序,由多条 SQL 语句组成,应该:

1) 应该将语句 组成语句块,用 begin / end 标识;

2)语句块的语句需要独立的语句结束符:分号;

命令行:由于触发器内使用;作为语句结束符,

             则当命令行客户端遇到;时,应该理解成

            触发程序内子语句结束,而不是整个触发程序的结束。

           应该通过修改命令行的语句结束符来达到目的,delimiter语句可以完成设置语句结束符。

 

 1 delimiter $$    //用 $$ 表示结束符
 2 create trigger ruxue after insert on czbk_stu  //当对表 czbk_stu 执行 insert 操作时,会触发如下操作:
 3 for each row
 4 begin
 5 update class set stu_count=stu_count+1;   //表 class 中的字段 stu_count加一 ,
 6 update class set cz_money=cz_money+20;  // 表 class 中的字段 cz_money 增加20
 7 end
 8 $$  // 整段语句的结束
 9 
10 delimiter ;   // 将结束符重新改回分号

 

转载于:https://www.cnblogs.com/zhqiang/p/6925572.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值