Mysql之触发器

1、监听数据进行操作:

在当前的表上,设置一个对每行数据的一个监听器,监听相关相关事件。每当事件发生时,会执行一段由sql完成的一段功能代码。

触发器的元素:事件执行代码

创建触发器:create trigger名字 事件 执行代码

事件:插入insert,删除delete,修改update

事件的时机:执行之前和执行之后。after before

由时机和事件在一起形成了六种事件。before insert,before delete,before update,after insert,after delete,after update

示例:

create trigger jiaobanfei after update(after update类型事件代码) on czbk_student(表名,这里表示被监听的表)

for each row

update class set cz_money=cz_money-20(被监听表发生相应改变后的处理执行代码);

注意:1)触发器不能重名;2)目前mysql只支持一类事件设置一个触发器。


2、管理触发器

删除 drop trigger trigger_name,查看 show create trigger trigger_name


3、在触发器内,获得触发该触发程序时的数据:

利用触发程序内的new 和old来完成

old:监听事件所在表上的数据,在事件发生之前时的数据。旧的数据。  New:监听表上,事件发生之后,新处理完毕的数据。数据,就是触发该事件的记录。

drop trigger jiaobanfei:

create trigger jiaobanfei after update on czbk_student

for each row

update class set cz_money=cz_money+(old.stu_money-new.stu_money);

-----------------------------------------------------------------------------

update czbk_student set stu_money=stu_money-500 where id=1;

示例:




4、事件是insert,不能使用old(因为本身不存在这个数据);事件是delete,不能使用new(因为删除后也不存在新的数据)

如果一个触发程序由多条sql语句组成。

应该:

1、将语句组成语句块(begin end)用来标志语句块

2、语句块的语句需要独立的语句结束符,分号;

3、命名行:由于触发器程序内使用分号作为语句结束符。那么当命令行客户端碰到分号时,就应该理解成触发程序内子语句结束,而不是整个创建触发器的语句结束。应该通过修改命令行的语句结束符达到目的。delimiter语句可以完成设置语句结束符。

delimiter $$

create trigger ruxue after insert on czbk_student

for each row

begin

update class set stu_count=stu_count+1;

update class set cz_money=cz_money+20;

end

$$

delimiter;


测试:

究竟可以触发哪些触发器:

insert into on duplicate key update

Replace

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Henry_Jing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值