MySQL的存储过程和触发器

要求:

 一、触发器

1、建立触发器,订单表中增加订单数量后,商品表商品数量同步减少对应的商品订单出数量,并测试

mysql> delimiter //
mysql> create trigger after_orders_insert
    -> after insert on orders
    -> for each row
    -> begin
    ->          update goods
    ->          set num = num - new.onum
    ->          where gid = new.gid;
    -> end //
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;

测试: 


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

mysql> delimiter //
mysql> create trigger after_orders_delete
    -> after delete on orders
    -> for each row
    -> begin
    ->          update goods
    ->          set num = num + old.onum
    ->          where gid = old.gid;
    -> end //
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;

测试:

mysql> insert into orders values('002','D0001','计算器',28,17,'2025-02-09');

mysql> delete from orders where oid=2;


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

mysql> delimiter //
mysql> create trigger after_orders_update
    -> after update on orders
    -> for each row
    -> begin
    ->          declare onum_change int;
    ->          set onum_change = new.onum - old.onum;
    ->          update goods
    ->          set num = num - onum_change
    ->          where gid = new.gid;
    -> end //
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;

测试: 

二、存储过程

1、创建提取emp_new表所有员工姓名和工资的存储过程s1

mysql> delimiter //
mysql> create procedure s1()
    -> begin
    ->          select name,incoming from emp_new;
    -> end //


2、创建存储过程s2,实现输入员工姓名后返回员工的年龄

mysql> delimiter //
mysql> create procedure s2(in in_name varchar(255))
    -> begin
    ->          declare emp_age int;
    ->          select age into emp_age from emp_new where name=in_name;
    ->          select emp_age;
    -> end //
mysql> delimiter ;


3、创建一个存储过程s3,有2个参数,传入部门号,返回该部门的平均工资

mysql> delimiter //
mysql> create procedure s3(in dept_id int,out avg_incoming decimal(10,2))
    -> begin
    ->         select avg(incoming) into avg_incoming from emp_new where dept2=dept_id;
    -> end //

mysql> delimiter ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值