MySQL数据库教程之十五:MySQL触发器实例

MySQL数据库教程之十五:MySQL触发器实例

准备工作:

先启动Navicat for MySQL,建立数据库

建立两个表:Goods(商品表)、Orders(订单表)

Goods(商品表)

create table Goods
(
	gid 	char(8)  not null    primary key, #商品编号
	name    varchar(10),		              #商品名
    price   decimal(8,2),                     #价格
	num     int                               #数量
);

Orders(订单表)

create table Orders
(
      oid         int        not null  primary key     auto_increment,     #订单号
      gid         char(10)   not null,                                     #商品号
      name        varchar(10),				                               #商品名
      price       decimal(8,2),                                            #价格
      onum        int ,                                                    #订单数量
      otime       date                                                     #订单时间
); 

在商品表中导入商品

insert into Goods values
('A0001', '橡皮',  2.5,  100),
('B0001','小楷本', 2.8, 210),
('C0001','铅笔',  1.2,  120),
('D0001','计算器',28, 20);

任务一、建立触发器,订单表中增加订单数量后,商品表商品数量同步减少对应的商品订单出数量

create trigger tri_insert_orders  after insert on orders

for each row

begin
          update goods set  num = num-new.onum where gid = new.gid;
end;

验证:

在订单表插入订单

insert into orders  values 
(null, 'A0001','橡皮',  2.5, 51, now());

查看商品表相对应商品的数量(原来数量为100)

select * from Goods where gid = 'A0001';

任务二、建立触发器,实现功能:客户取消订单,恢复商品表对应商品的数量

create trigger tri_cancle_orders   after delete on orders

for each row

begin
         update goods set num= num+old.onum where gid = old.gid;
end 

验证:在订单表中删除订单,查看商品表中商品数量

delete from orders where gid = 'A0001';

任务三、建立触发器,实现功能:客户修改订单,商品表对应商品数量同步更新

create trigger tri_update_orders  after update on orders  for each row

begin
         update goods set num= num+(old.onum-new.onum)  where gid = old.gid;
end 

验证:

开始,‘A0001’订单数为51,后改为72,查看商品表对应商品数量

更改数量

查询商品数量

任务四、建立触发器,实现功能:对于所下订单,进行判断,如果订单的数量>库存数量,就认为是恶意订单,把订单数量变为库存最大数量。

create trigger tri_over_goodsnum before insert on orders for each row

begin   
      declare rnum   int;
      select num into rnum from goods where gid = new.gid;

      if new.onum > rnum then
             set new.onum = rnum;
     end if;

     update goods set num = 0 where gid = new.gid;
end;

验证:计算器库存为20,商品号:D0001

订单数超过20,查看对应商品数量

查看商品表数量及订单数量

 

原创文章 64 获赞 14 访问量 3万+

猜你喜欢

转载自blog.csdn.net/fjqlldg/article/details/105763993