首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

触发器低级学习

2013-03-27 
触发器初级学习[img][/img][img][/img][img][/img][img][/img]测试用到两张表: 库存表gcreate table g(id

触发器初级学习

[img]

[/img]


[img]

[/img]


[img]

[/img]


[img]

[/img]


测试用到两张表: 库存表g 
create table g(id int,name varchar(10),number int);

[img]

[/img]



订单表:
create table o(oid int,gid int,much int);



修改结束控制符:
delimiter $       把以 ; 结尾改为 $结尾。



【一】监听插入的触发器(例如有客户提交了订单)
create trigger t1after insert on ofor each rowbeginupdate g set number = number - new.much where id = new.gid;end$


当向o表中插入一行数据时(哈哈哈,有人买了两头猪),g表中猪的数量也随着减少两头,还剩20头。
[img]

[/img]

当向o表中插入一行数据时(哈哈哈,有人买了四只羊),g表中羊的数量也随着减少四只,还剩15只羊。
[img]

[/img]




【二】监听删除的触发器(例如有客户取消了订单)
#触发器的创建----监听的是delete动作create trigger t2after delete on ofor each rowbeginupdate g set number = number + old.much where id = old.gid;end$

当从o表删除一行数据(哈哈,买羊的人不买了),g表中羊的数量也相应的增加四只,变为19只羊。
[img]

[/img]
当从o表删除一行数据(哈哈,买猪的人也不买了,fuck),g表中猪的数量也相应的增加两头,变为22头猪。
[img]

[/img]



【三】监听修改的触发器(例如有客户修改了订单)
#触发器的创建----监听的是update动作create trigger t3after update on ofor each rowbeginupdate g set number = number + old.much where id = old.gid;update g set number = number - new.much where id = new.gid;end$


有客户首先买了 5头猪,库存中猪的数量较少了5头。
[img]

[/img]

客户觉得猪肉不好吃,就把订单换成了10只羊。库存中猪的数量增加了5头,羊的数量减少了10只。
[img]

[/img]

总结:
触发器四要素:监视地点、监视事件、触发时间、触发事件。#修改sql语句的结束符(把结束符由;改为$)delimiter $#创建触发器的语法create trigger triggerName(触发器名字,自定义)after/before insert/update/delete on 表名for each row  #这句是固定格式beginsql语句; #一句或多句,insert/update/delete范围内end$ (在创建触发器前,把sql的结束符改为了$) 查看有哪些触发器:show triggers;删除触发器:drop trigger 触发器的名字;如何在触发器中引用行的值:一、对于insert而言,新增的行用 new来表示,行中的每一列的值用 new.列名来表示。 二、对于delete而言,原本有一行,后来被删除,想引用被删除的这一行,用old来表示,用old.列名    就可以引用被删除行中的值。三、对于update而言,被修改的行,修改前的数据用old表示,old.列名引用被修改之前行中的值;修改后    的数据用new来表示,new.列名引用被修改之后行中的值。

热点排行