MySQL第五次作业

**一、触发器部分**

  1. 订单表中增加订单数量后,商品表商品数量同步减少对应的商品订单出数量

CREATE TRIGGER update_goods_num_after_insert_orders

AFTER INSERT ON orders

FOR EACH ROW

UPDATE goods

SET num = num - NEW.onum

WHERE gid = NEW.gid;

-- 测试

INSERT INTO orders (gid, name, price, onum, otime)

VALUES ('A0001', '橡皮', 2.5, 10, '2024-07-25');

  1. 客户取消订单,恢复商品表对应商品的数量

CREATE TRIGGER restore_goods_num_after_cancel_order

AFTER DELETE ON orders

FOR EACH ROW

UPDATE goods

SET num = num + OLD.onum

WHERE gid = OLD.gid;

-- 测试

DELETE FROM orders WHERE oid = 1;

  1. 客户修改订单,商品表对应商品数量同步更新

CREATE TRIGGER update_goods_num_after_update_orders

AFTER UPDATE ON orders

FOR EACH ROW

UPDATE goods

SET num = num + OLD.onum - NEW.onum

WHERE gid = NEW.gid;

-- 测试

UPDATE orders SET onum = 20 WHERE oid = 2;

**二、存储过程部分**

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

USE mydb7_openlab;

CREATE PROCEDURE s1()

SELECT name, salary FROM emp_new;

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

CREATE PROCEDURE s2(IN emp_name VARCHAR(50))

SELECT age FROM emp_new WHERE name = emp_name;

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

CREATE PROCEDURE s3(IN dept_id INT, OUT avg_salary DECIMAL(10, 2))

SELECT AVG(salary) INTO avg_salary FROM emp_new WHERE department_id = dept_id;

相关推荐
Brookty1 小时前
【MySQL】JDBC编程
java·数据库·后端·学习·mysql·jdbc
_代号0071 小时前
MySQL梳理一:整体架构概览
后端·mysql
码不停蹄的玄黓2 小时前
深入拆解MySQL InnoDB可重复读(RR)隔离级别:MVCC+临键锁如何「锁」住一致性?
数据库·mysql·可重复读
用户91453633083912 小时前
MySQL查询执行顺序:一张图看懂SQL是如何工作的
mysql
Lx3523 小时前
MySQL物化视图:预计算查询结果的定期刷新
sql·mysql·性能优化
Lx3523 小时前
Mysql死锁日志分析:事务逻辑冲突的排查技巧
sql·mysql·性能优化
RainbowSea3 小时前
14. MySQL 锁的详细说明
java·sql·mysql
RainbowSea3 小时前
12 MySQL 数据库其它调优策略
java·sql·mysql
ChinaRainbowSea4 小时前
9-2 MySQL 分析查询语句:EXPLAIN(详细说明)
java·数据库·后端·sql·mysql
deeper_wind4 小时前
MySQL数据库基础(小白的“升级打怪”成长之路)
linux·数据库·mysql