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)
相关推荐
一笑的小酒馆9 小时前
Android中WebRTC通信
android
灯澜忆梦10 小时前
【MySQL10】进阶篇 | 索引_#2性能优化
数据库·sql·mysql·性能优化
KevinWang_12 小时前
Android Hilt 依赖注入
android
古法安卓13 小时前
Android-深入理解 Android 回调(Callback)机制
android·性能优化·android studio
古法安卓13 小时前
Android-车机 GNSS 定位数据接收问题排查
android·java·android studio
小乌龟打怪升级14 小时前
adb 详解
adb
油丶酸萝卜别吃15 小时前
MySQL B+ 树查询全过程详解
数据库·mysql
FungLeo15 小时前
Flutter 吸顶分组列表实战:语义桶分组 + 点击头平滑滚动
android·flutter
Cry丶15 小时前
遗留系统数据迁移实战(九):区域编码迁移与补偿接口设计
mysql·数据治理·数据迁移·区域编码·补偿接口·组织区域
阿巴斯甜15 小时前
Android 自定义权限
android