当前位置: 首页 > article >正文

MySql --- 作业

一. 触发器
1·建立两个表:goods(商品表)、orders(订单表)

mysql> create database mydb16_tigger;
Query OK, 1 row affected (0.01 sec)
 
mysql> use mydb16_tigger;
Database changed
mysql>
mysql> CREATE TABLE goods (
    ->     gid CHAR(8) PRIMARY KEY,
    ->     name VARCHAR(10),
    ->     price DECIMAL(8, 2),
    ->     num INT
    -> );
Query OK, 0 rows affected (0.02 sec)
 
mysql> CREATE TABLE orders (
    ->     oid INT PRIMARY KEY AUTO_INCREMENT,
    ->     gid CHAR(10) NOT NULL,
    ->     name VARCHAR(10),
    ->     price DECIMAL(8, 2),
    ->     onum INT,
    ->     otime DATE
    -> );
Query OK, 0 rows affected (0.02 sec)

在商品表中导入商品记录

mysql> INSERT INTO goods VALUES
    -> ('A0001', '橡皮', 2.5, 100),
    -> ('B0001', '小楷本', 2.8, 210),
    -> ('C0001', '铅笔', 1.2, 120),
    -> ('D0001', '计算器', 28, 20);
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

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

mysql> DELIMITER //
mysql>
mysql> CREATE TRIGGER update_goods_num_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.01 sec)

INSERT INTO orders (gid, name, price, onum, otime)
VALUES ('A0001', '橡皮', 2.5, 10, CURDATE());
 
SELECT * FROM goods WHERE gid = 'A0001';

+-------+------+-------+------+
| gid   | name | price | num  |
+-------+------+-------+------+
| A0001 | 橡皮 |  2.50 |   90 |
+-------+------+-------+------+
1 row in set (0.01 sec)

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

mysql> CREATE TRIGGER restore_goods_num_after_delete
    -> 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.01 sec)

mysql> DELIMITER ;
mysql> DELETE FROM orders WHERE oid = 1;
Query OK, 1 row affected (0.01 sec)
 
mysql>
mysql> SELECT * FROM goods WHERE gid = 'A0001';
+-------+------+-------+------+
| gid   | name | price | num  |
+-------+------+-------+------+
| A0001 | 橡皮 |  2.50 |  100 |
+-------+------+-------+------+
1 row in set (0.00 sec)

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

mysql> CREATE TRIGGER update_goods_num_after_update
    -> AFTER UPDATE ON orders
    -> FOR EACH ROW
    -> BEGIN
    ->     -- 计算订单数量的差值
    ->     DECLARE diff INT;
    ->     SET diff = NEW.onum - OLD.onum;
    ->     -- 更新商品表中的商品数量
    ->     UPDATE goods
    ->     SET num = num - diff
    ->     WHERE gid = NEW.gid;
    -> END //
Query OK, 0 rows affected (0.01 sec)
 
mysql> DELIMITER ;
mysql> UPDATE orders SET onum = 20 WHERE oid = 1;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0
 
mysql> SELECT * FROM goods WHERE gid = 'A0001';
+-------+------+-------+------+
| gid   | name | price | num  |
+-------+------+-------+------+
| A0001 | 橡皮 |  2.50 |  100 |
+-------+------+-------+------+
1 row in set (0.00 sec)

二.存储过程
使用mydb7 openlab库

 USE mydb7_openlab;

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

DELIMITER //
 
CREATE PROCEDURE s()
BEGIN
    SELECT ename, sal FROM emp_new;
END //
 
DELIMITER ;

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

mysql> CREATE PROCEDURE s2(IN emp_name VARCHAR(50), OUT emp_age INT)
    -> BEGIN
    ->     SELECT TIMESTAMPDIFF(YEAR, birthdate, CURDATE()) INTO emp_age
    ->     FROM emp_new
    ->     WHERE ename = emp_name;
    -> END //
Query OK, 0 rows affected (0.01 sec)

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

mysql> DELIMITER ;
mysql> DELIMITER //
mysql>
mysql> CREATE PROCEDURE s3(IN dept_num INT, OUT avg_sal DECIMAL(8, 2))
    -> BEGIN
    ->     SELECT AVG(sal) INTO avg_sal
    ->     FROM emp_new
    ->     WHERE deptno = dept_num;
    -> END //
Query OK, 0 rows affected (0.01 sec)

 


    http://www.kler.cn/a/542217.html

    相关文章:

  1. bug-ant下拉框解决下拉框跟随表单容器(指定下拉框挂载容器):getPopupContainer=“p=>p.parentNode“
  2. 掌握正则表达式_模式匹配的艺术
  3. JavaEE-前端与后台的搭建
  4. 鸿蒙harmony 手势密码
  5. 【安当产品应用案例100集】037-强化OpenVPN安全防线的卓越之选——安当ASP身份认证系统
  6. 常见的前端框架和库有哪些
  7. 使用DeepSeek和Kimi快速自动生成PPT
  8. MySQL InnoDB引擎 有哪些锁
  9. AI工具发展全景分析与战略展望
  10. Hyperledger Fabric 入门笔记(十八)Fabric V2.5 测试网络部署补充 - 排序节点管理
  11. 【天梯赛】L2-002 链表去重
  12. Free DNS
  13. WPS中如何批量上下居中对齐word表格中的所有文字
  14. C# OpenCV机器视觉:SoftNMS非极大值抑制
  15. extern关键字和 extern “C“ 的作用
  16. 【算法】动态规划专题⑪ —— 区间DP python
  17. 构建资源池化与降本增效
  18. Linux服务管理操作命令-systemctl命令
  19. ZZNUOJ(C/C++)基础练习1091——1100(详解版)⭐
  20. JavaScript设计模式 -- 单例模式
  21. ADB详细教程
  22. 【leetcode】双指针:移动零 and 复写零
  23. C++ STL容器之list的使用及复现
  24. 使用 POI-TL 和 JFreeChart 动态生成 Word 报告
  25. 2.11寒假作业
  26. FTP服务端搭建:“文件”存储破烂站