mysql触发器实例收集

来源:互联网 发布:csgon卡优化 编辑:程序博客网 时间:2024/06/05 16:11
1.假设系统中有两个表:

班级表 class(班级号 classID, 班内学生数 stuCount)
学生表 student(学号 stuID, 所属班级号 classID)
要创建触发器来使班级表中的班内学生数随着学生的添加自动更新,代码如下:

DELIMITER $  //将结束符设置为‘$’
create trigger tri_stuInsert after insert  // 创建触发器 以在插入表以后为触发点
on student for each row  //应用到student表的每一行
begin //语句开始标志
declare c int;  //声明变量,以分号结束
set c = (select stuCount from class where classID=new.classID); //设置变量,获取新插入的班级id对应的学生总数
update class set stuCount = c + 1 where classID = new.classID; //更新class表中新插入班级id所在的学生总数
end$
DELIMITER ; //将结束符恢复默认值
2.一旦生成订单,对应的库存表要减去相应的数据
建两张表 :一个商品goods表 一个订单order表 
mysql> create table goods(goods_id int primary key auto_increment,goods_name varchar(64),shop_price decimal(10,2),goods_number int)engine=myisam default charset =utf8; 
mysql> create table `order`(goods_id int primary key auto_increment,goods_name varchar(64),buy_number int)engine=myisam default charset=utf8; 
mysql>insert into goods values(null,'nokiaN85',2000,35),(null,'iphone4S',4500,30),(null,'Lnmia',5000,40),(null,'samsung',4200,20);
 new 的使用
mysql> create trigger alter_goods_number after insert on `order` for each row update goods set goods_number=goods_number-new.buy_number where goods_id=new.goods_id; 
mysql> insert into `order` values(4,'samsung',5); 
old 的使用 
mysql> create trigger back_goods_number after delete on `order` for each row update goods set goods_number=goods_number+old.buy_number where goods_id=old.goods_id; 
mysql> delete from `order` where goods_id=1; 
更新 (update将之前下的订单撤销,再重新下订单) 
0 0