MySQL-5-触发器和储存过程

一、题目

二、过程及结果截图

1、触发器

1)使用mydb16_trigger数据库,建立表

建表goods

建表orders

2)插入数据

3)建立触发器

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

建立触发器

复制代码
mysql> delimiter //
mysql> create trigger orders_after_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.00 sec)

mysql> delimiter ;

测试:添加订单

复制代码
mysql> insert into orders(gid,name,price,onum,otime) values('A0001','橡皮',2.5,5,curdate());

测试结果:

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

建立触发器

复制代码
mysql> delimiter //
mysql>
mysql> create trigger orders_after_delete_teigger
    -> 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.00 sec)
mysql> delimiter ;

测试:删除订单

复制代码
mysql> delete from orders where oid=1;

测试结果:

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

建立触发器

复制代码
mysql> delimiter //
mysql> create trigger orders_after_update
    -> after update on orders for each row
    -> begin
    ->       update goods set num=num+old.onum where gid=old.gid;
    ->       update goods set num=num-new.onum where gid=new.gid;
    -> end //
Query OK, 0 rows affected (0.04 sec)

mysql> delimiter ;

测试:修改订单,先取消后添加

提前添加订单,'小楷本'10份

复制代码
mysql> insert into orders(gid,name,price,onum,otime) values('B0001','小楷本',2.8,10,curdate());

修改订单,'小楷本'15份

复制代码
mysql> update orders set onum=15 where oid=2;

测试结果:

2、储存过程

(1)使用mydb7 openlab库

复制代码
mysql> use mydb7_openlab ;

Database changed

(2)创建提取emp_new表所有员工姓名和工资的存储过程s

先查询emp_new表所有员工姓名和工资

成功后再创建s1

复制代码
mysql> delimiter //
mysql> create procedure s1()
    -> begin
    ->       select name 姓名,incoming 工资 from emp_new;
    -> end //
Query OK, 0 rows affected (0.03 sec)

mysql> delimiter ;

测试:

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

先查询emp_new表"王五"的年龄

成功后再创建s2

复制代码
mysql> delimiter //
mysql> create procedure s2(in iname varchar(11),out oage int)
    -> begin
    ->       select age into oage from emp_new where name=iname;
    -> end //
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;

测试:

复制代码
mysql> call s2('王五',@oage);
Query OK, 1 row affected (0.00 sec)

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

先查询emp_new表部门号101部门的平均工资

成功后再创建s3

复制代码
mysql> delimiter //
mysql> create procedure s3(in idept int,out avg_incoming decimal(8,2))
    -> begin
    ->       select avg(incoming) into avg_incoming from emp_new where dept2=idept;
    -> end //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

测试:

复制代码
mysql> call s3(101,@avg_inc);
Query OK, 1 row affected, 1 warning (0.00 sec)
相关推荐
白云LDC2 分钟前
Android Studio新建Vecter asset一直显示Loading icons(转圈圈)的解决办法
android·ide·android studio
dLYG DUMS38 分钟前
DBeaver连接本地MySQL、创建数据库表的基础操作
数据库·mysql
苍煜1 小时前
MySQL分库分表和ES到底怎么选?
数据库·mysql·elasticsearch
czlczl200209252 小时前
松散索引扫描/跳跃索引扫描
数据库·mysql·性能优化
苍煜3 小时前
二叉树、红黑树、B树、B+树通俗教学:各自适配场景+MySQL索引终极选型原因
数据结构·b树·mysql
Rytter3 小时前
某气骑士 libtprt.so 反 Frida 机制分析与绕过
android·安全·网络安全
alexhilton4 小时前
揭密:Compose应用如何做到启动提升34%
android·kotlin·android jetpack
【心态好不摆烂】5 小时前
MySQL操作库
数据库·mysql
沐言人生6 小时前
React Native 源码分析1——HybridData 机制深度分析
android·react native
程序员陆业聪6 小时前
跨平台框架全景图:Flutter/KMP/KuiKly/RN的2026年格局
android