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)
相关推荐
杉氧10 小时前
深入理解 Compose 重组机制:快照系统如何驱动 UI 精准刷新?
android·架构·android jetpack
召钱熏11 小时前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端
杉氧11 小时前
深度解析:Jetpack Compose 核心架构与底层原理 —— 十年安卓老兵的“破茧重生”
android·架构·android jetpack
通玄12 小时前
Jetpack Compose 入门系列(七):ViewModel 与界面状态管理
android
落魄Android在线炒饭12 小时前
Android Framework 开发技巧:android.jar 生成与系统快速编译验证
android
如此风景12 小时前
Kotlin Flow操作符学习
android·kotlin
plainGeekDev13 小时前
GreenDAO → Room
android·java·kotlin
weiggle14 小时前
第八篇:ViewModel + Compose——生产级状态管理实践
android
恋猫de小郭19 小时前
Amper 正式转正 Kotlin Toolchain ,Gradle 未来何去何从
android·前端·flutter
plainGeekDev20 小时前
ButterKnife → ViewBinding
android·java·kotlin