数据库练习——编写触发器及存储过程

1. 触发器

建立两个表:goods(商品表)、orders(订单表)

在商品表中导入商品记录

mysql> create database mydb16_trigger;
Query OK, 1 row affected (0.00 sec)mysql> use mydb16_trigger;
Database changed
mysql> create table goods(-> gid char(8) primary key,-> name varchar(10),-> price decimal(8,2),-> num int);
Query OK, 0 rows affected (0.01 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.01 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.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

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

mysql> create trigger orders_after_insert_trigger-> after insert on orders for each row-> update goods set num = num-new.onum-> where gid = new.gid;
Query OK, 0 rows affected (0.00 sec)

测试

mysql> select * from goods;
+-------+--------+-------+------+
| gid   | name   | price | num  |
+-------+--------+-------+------+
| A0001 | 橡皮   |  2.50 |  100 |
| B0001 | 小楷本 |  2.80 |  210 |
| C0001 | 铅笔   |  1.20 |  120 |
| D0001 | 计算器 | 28.00 |   20 |
+-------+--------+-------+------+
4 rows in set (0.00 sec)mysql> insert into orders(gid,name,price,onum,otime) value('C0001','铅笔',1.
2,80,now());
Query OK, 1 row affected, 1 warning (0.00 sec)mysql> select * from goods;
+-------+--------+-------+------+
| gid   | name   | price | num  |
+-------+--------+-------+------+
| A0001 | 橡皮   |  2.50 |  100 |
| B0001 | 小楷本 |  2.80 |  210 |
| C0001 | 铅笔   |  1.20 |   40 |
| D0001 | 计算器 | 28.00 |   20 |
+-------+--------+-------+------+
4 rows in set (0.00 sec)mysql> select * from orders;
+-----+-------+------+-------+------+------------+
| oid | gid   | name | price | onum | otime      |
+-----+-------+------+-------+------+------------+
|   1 | C0001 | 铅笔 |  1.20 |   80 | 2024-07-26 |
+-----+-------+------+-------+------+------------+
1 row in set (0.00 sec)

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

mysql> create trigger orders_after_delete_trigger-> after delete on orders for each row-> update goods set num=num+old.onum-> where gid=old.gid;
Query OK, 0 rows affected (0.00 sec)

测试

mysql> select * from goods;
+-------+--------+-------+------+
| gid   | name   | price | num  |
+-------+--------+-------+------+
| A0001 | 橡皮   |  2.50 |  100 |
| B0001 | 小楷本 |  2.80 |  210 |
| C0001 | 铅笔   |  1.20 |   40 |
| D0001 | 计算器 | 28.00 |   20 |
+-------+--------+-------+------+
4 rows in set (0.00 sec)mysql> select * from orders;
+-----+-------+------+-------+------+------------+
| oid | gid   | name | price | onum | otime      |
+-----+-------+------+-------+------+------------+
|   1 | C0001 | 铅笔 |  1.20 |   80 | 2024-07-26 |
+-----+-------+------+-------+------+------------+
1 row in set (0.00 sec)mysql> delete from orders where gid = 'C0001';
Query OK, 1 row affected (0.00 sec)mysql> select * from goods;
+-------+--------+-------+------+
| gid   | name   | price | num  |
+-------+--------+-------+------+
| A0001 | 橡皮   |  2.50 |  100 |
| B0001 | 小楷本 |  2.80 |  210 |
| C0001 | 铅笔   |  1.20 |  120 |
| D0001 | 计算器 | 28.00 |   20 |
+-------+--------+-------+------+
4 rows in set (0.00 sec)

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

mysql> select *from goods;
+-------+--------+-------+------+
| gid   | name   | price | num  |
+-------+--------+-------+------+
| A0001 | 橡皮   |  2.50 |  100 |
| B0001 | 小楷本 |  2.80 |  210 |
| C0001 | 铅笔   |  1.20 |  120 |
| D0001 | 计算器 | 28.00 |   20 |
+-------+--------+-------+------+
4 rows in set (0.00 sec)mysql> select * from orders;
Empty set (0.00 sec)mysql> insert into orders(gid,name,price,onum,otime) value('A0001','橡皮',2.
5,20,now());
Query OK, 1 row affected, 1 warning (0.00 sec)mysql> select *from goods;
+-------+--------+-------+------+
| gid   | name   | price | num  |
+-------+--------+-------+------+
| A0001 | 橡皮   |  2.50 |   80 |
| B0001 | 小楷本 |  2.80 |  210 |
| C0001 | 铅笔   |  1.20 |  120 |
| D0001 | 计算器 | 28.00 |   20 |
+-------+--------+-------+------+
4 rows in set (0.00 sec)mysql> select * from orders;
+-----+-------+------+-------+------+------------+
| oid | gid   | name | price | onum | otime      |
+-----+-------+------+-------+------+------------+
|   2 | A0001 | 橡皮 |  2.50 |   20 | 2024-07-26 |
+-----+-------+------+-------+------+------------+
1 row in set (0.00 sec)mysql> update orders set onum = 35 where  gid = 'A0001';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select *from goods;
+-------+--------+-------+------+
| gid   | name   | price | num  |
+-------+--------+-------+------+
| A0001 | 橡皮   |  2.50 |   65 |
| B0001 | 小楷本 |  2.80 |  210 |
| C0001 | 铅笔   |  1.20 |  120 |
| D0001 | 计算器 | 28.00 |   20 |
+-------+--------+-------+------+
4 rows in set (0.00 sec)mysql> select * from orders;
+-----+-------+------+-------+------+------------+
| oid | gid   | name | price | onum | otime      |
+-----+-------+------+-------+------+------------+
|   2 | A0001 | 橡皮 |  2.50 |   35 | 2024-07-26 |
+-----+-------+------+-------+------+------------+
1 row in set (0.00 sec)

2.存储过程

使用mydb7 openlab库

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

mysql> delimiter $$
mysql> create procedure s1()-> begin->          select name,incoming from emp_new;-> end $$
Query OK, 0 rows affected (0.01 sec)mysql> delimiter ;
mysql> call s1();

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

mysql> delimiter $$
mysql> create procedure s3(in in_dept int,out avg_sal float)-> begin->     select avg(incoming) into avg_sal from emp_new where dept2=in_dept;-> end $$

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

mysql> delimiter $$
mysql> create procedure s3(in in_dept int,out avg_sal float)-> begin->     select avg(incoming) into avg_sal from emp_new where dept2=in_dept;-> end $$

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3266772.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

系统架构师(每日一练7)

每日一练 1.关于网络延迟正确的是()。答案与解析 A.在对等网络中,网络的延迟大小与网络中的终端数量无关 B.使用路由器进行数据转发所带来的延迟小于交换机, C.使用internet服务器可最大程度地减小网络延迟 D.服务器延迟的主要影响因素是队列延迟和磁盘10延迟 2.以…

idea中项目目录,文件显示不全问题

问题:idea中项目目录显示不全问题 解决办法1: 删除目录中的.idea文件 用idea重新打开文件就行了 办法2:手动导入为maven项目 1. 2. 3. 4.选择要导入的项目,导入为maven

【网络流】——初识(最大流)

网络流-最大流 基础信息引入一些概念基本性质 最大流定义 Ford–Fulkerson 增广Edmons−Karp算法Dinic 算法参考文献 基础信息 引入 假定现在有一个无限放水的自来水厂和一个无限收水的小区,他们之间有多条水管和一些节点构成。 每一条水管有三个属性&#xff1a…

重拾CSS,前端样式精读-函数(颜色,计算,图像和图形)

前言 本文收录于CSS系列文章中,欢迎阅读指正 在计算机编程中,函数有着重要的作用和意义,它可以实现封装,复用,模块化,参数等功能效果,在如何在CSS中写变量?一文带你了解前端样式利…

AI学习记录 - 图像识别的基础入门

代码实现,图像识别入门其实非常简单,这里使用的是js,其实就是把二维数组进行公式化处理,处理方式如上图,不同的公式代表的不同的意义,这些意义网上其实非常多,这里就不细讲了。 const getSpecif…

【YOLOv8系列】图像分类篇----通过YOLOv8实现图像分类功能

最近需要使用YOLOv8对自己的数据集进行训练,从而实现图像分类的功能,因此记录一下整个过程。 YOLOv8的github地址:https://github.com/ultralytics/ultralytics 参考链接:超详细YOLOv8图像分类全程概述:环境、训练、验证与预测详解 文章目录 一、YOLOv8环境搭建二、准备…

电脑QQ录屏功能怎么用?图文教程,轻松掌握电脑录屏

“想问一下大家知道电脑QQ录屏功能怎么打开吗?一直以来我使用电脑QQ截图非常方便,但不知道原来QQ还有录屏功能。希望知道QQ录屏功能使用方法的朋友教一下我好吗?” 今天,就让我带大家一起探索电脑QQ录屏功能怎么用?看…

怎么注册自己的电子邮件地址

无论是在职场上的工作沟通、日常的在线购物、或是订阅各类新闻资讯,电子邮件都是您不可或缺的数字化工具。本文将手把手引导您完成注册过程,从选择服务商到完成所有必要步骤,帮助您轻松拥有自己的电子邮件账户。 一、选择电子邮件服务商 市…

友盟U-APM——优秀的前端性能监控工具

在数字化转型浪潮的推动下,移动应用已成为企业连接用户、驱动业务增长的核心载体。然而,随着应用复杂度的日益提升,用户对于应用性能稳定性的期待也水涨船高。面对应用崩溃、卡顿、加载缓慢等频发问题,如何确保应用的流畅运行,成为产研团队亟待解决的关键挑战。在此背景下,友盟…

常见的CSS属性(一)——字体、文本、边框、内边距、外边距、背景、行高、圆角、透明度、颜色值

一、字体 二、文本 三、边框 四、外边距 五、内边距 六、背景 七、行高 八、圆角 九、透明度 九、颜色值 元素的继承性是指给父元素设置了某些属性,子元素或后代元素也会有作用。 一、字体 “font-*”是字体相关的属性,具有继承性。代码如下&a…

浅谈监听器之简单数据写入

浅谈监听器之简单数据写入 “简单数据写入”(Simple Data Writer)监听器便是其中之一,它提供了一种简便的方式来将测试结果直接输出到文件中,便于后续的数据分析与处理。 简单数据写入监听器概述 “简单数据写入”监听器&#…

pdf压缩在线免费 pdf压缩在线免费网页版 在线pdf压缩在线免费 免费pdf压缩工具 压缩到最小几种方法详细步骤分享

PDF是当前最为常见的电子文档格式,它可以保护文档不被篡改或复制格式可以保持原格式。然而,因为市面上积攒的PDF文件数量过多,也容易因为体积太大的缘故,致使后面对磁盘存储造成很大的压力,压缩PDF文件能有效缩小其体积…

海上导航技术介绍

导航的目的主要是帮助人们或设备确定自己在地理空间中的位置,从而能够引导飞机、舰船、车辆等沿着设定路线安全、准确地到达目的地。 导航可以提供两类信息:第一类信息为载体自身的运动参数,如用户自己的三维坐标和速度矢量、航向、姿态等信…

【python】PyQt5中QPushButton的用法详细解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

苍穹外卖浏览器前端界面修改

背景: 客户原始方案是期望做一个Spring Boot Vue的饿了么系统,但时间上太仓促,所以建议选择开源的苍穹外码目作为作业提交。 客户接受了建议的方案后,期望对前端页面做一些个性化的定制修改。 过程: 苍穹外卖简单介…

Java面试八股之后Spring、spring mvc和spring boot的区别

Spring、spring mvc和spring boot的区别 Spring, Spring Boot和Spring MVC都是Spring框架家族的一部分,它们各自有其特定的用途和优势。下面是它们之间的主要区别: Spring: Spring 是一个开源的轻量级Java开发框架,最初由Rod Johnson创建&…

git实践汇总【配置+日常使用+问题解决】

**最初配置步骤:** git config --global user.name "yournemae" git config --global user.email "yourmail" git config -l ssh-keygen -t rsa -C “xxx.xxxx.EXTcccc.com” git config --global ssh.variant ssh $ git clone git仓库路径 git…

Python + PyQt 搭建可视化页面(PyCharm)

Python PyQt 搭建可视化页面(PyCharm) 配置PyQt5环境 1.1 安装PyQt5和PyQt5-tools pip install PyQt5pip install PyQt5-tools1.2 QtDesigner和PyUIC环境的配置 配置QTDesigner,用来打开QT可视化开发工具 在PyCharm中依次打开&#xff1a…

docker 构建 mongodb

最近需要在虚拟机上构建搭建mongo的docker容器,搞了半天老有错,归其原因,是因为现在最新的mango镜像的启动方式发生了变化,故此现在好多帖子,就是错的。 ok,话不多说: # 拉取最新镜像&#xf…

传统存储市场份额首次跌破50%,对中国企业意味着什么?

近日,《IDC China Enterprise Storage System Market Overview,2024Q1》报告发布,其中一个结论令人瞩目:中国的SDS(软件定义存储)和 HCI(超融合基础设施)的市场份额首次超越TESS&…