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)
相关推荐
Zhao_yani4 小时前
Apache Drill 连接 MySQL 或 PostgreSQL 数据库
数据库·mysql·postgresql·drill
计算机学姐6 小时前
基于SpringBoot的高校社团管理系统【协同过滤推荐算法+数据可视化】
java·vue.js·spring boot·后端·mysql·信息可视化·推荐算法
六件套是我10 小时前
redission实现延时队列
android·java·servlet
learning-striving10 小时前
SQL server创建数据表
数据库·sql·mysql·sql server
切糕师学AI11 小时前
SQL中的函数索引/表达式索引
数据库·sql·mysql·postgresql·oracle
S_h_a_11 小时前
八股-Mysql 基础篇(1)
数据库·mysql
Dxy123931021611 小时前
MySQL的GROUP_CONCAT函数详解
数据库·mysql
小白银子13 小时前
零基础从头教学Linux(Day 60)
linux·数据库·mysql·oracle
憋问我,我也不会14 小时前
MYSQL 命令
数据库·mysql