MySQL触发器和存储过程

news2025/1/16 1:07:40

 1、触发器

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

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

购买80根铅笔并观察表的数量是否减少

mysql> insert into orders(gid,name,price,onum,otime) value('C0001','铅笔',1.20,80,now());
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.01 sec)
mysql> insert into orders (gid, name, price, onum, otime) value('C0001', '铅笔', 1. 20, 80, now());
Query OK, 1 row affected, 1 warning (0.01 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)

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

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;

 取消订单

mysql> delete from orders where gid='C0001';

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

mysql> create trigger orders_after_update_trigger
    -> after update on orders for each row
    -> update goods set num=num+(old,onum-new.onum)
    -> where gid=old.gid;
mysql> insert into orders(gid, name, price, onum, otime) value('A0001','橡皮', 2.5, 50, now());
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from orders;
oid | gid | name | price | onum | otime
2 | A0001 | 橡皮 | 2.50 | 50 | 2024-07-26
1 row in set (0.00 sec)
mysql> select * from goods;
gid | name | price | num
A0001 | 橡皮 | 2.50 | 50
B0001 | 小楷本 | 2.80 | 210
C0001 | 铅笔 | 1.20 | 120
D0001 | 计算器 | 28.00 | 20
4 rows in set (0.00 sec)

 2、存储过程

(1):使用mydb7 openlab库

mysql>  use mydb7_openlab;
Database changed

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

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

 使用命令查看员工姓名和工资

mysql> call sl();
+-------+----------+
| name | incoming |
+-------+----------+
| 张三 | 4000 |
| 李四 | 3500 |
| 王五 | 2000 |
| 赵六 | 7500 |
| 荣七 | 8500 |
| 牛八 | 7300 |
+-------+----------+
6 rows in set (0.01 sec)
Query OK, 0 rows affected (0.01 sec)

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

mysql> desc emp_new;
Field	Type	Null	Key	Default	Extra
---+
+
sid	int	YES		NULL
name	varchar(11)	YES		NULL
age	int	YES		NULL
worktime_start	date	YES		NULL
incoming	int	YES		NULL
dept2	int	YES		NULL
+
-----+
6 rows in set (0.01 sec)

 

mysql> delimiter //
mysql> create procedure s2(in in_name varchar(11), out out_age int)
-> begin
-> select age into out_age from emp_new where name=in_name;
-> end //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;

 

mysql> call s2('王五',@age);
mysql> select @age;
+------+
| @age |
+------+
| 24    |
+------+
1 row in set (0.01 sec)

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

mysql> desc emp_new;
------+------+------+------+----------+-------
Field | Type | Null | Key | Default | Extra
------+------+------+------+----------+-------
sid | int | YES |  | NULL | 
name | varchar(11) | YES |  | NULL | 
age | int | YES |  | NULL | 
worktime_start | date | YES |  | NULL | 
incoming | int | YES |  | NULL | 
dept2 | int | YES |  | NULL | 
------+------+------+------+----------+-------
6 rows in set (0.00 sec)
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 //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter;

 使用s3

mysql> call s3(102,@avg_sal);
mysql> select @avg_sal;
+-
-+
| @avg_sal |
----+
8000
1 row in set (0.00 sec) 

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

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

相关文章

不知道你们有没有我这样的一种状态...总是这样又总是那样...

各位小伙伴们,我是风尚,我不知道你们有没有那么一刻,就是感觉站在人生的十字路口,感觉自己就像是被扔进了一个没有导航的迷宫,四周都是墙,头顶是蓝天白云,却怎么也找不到出口的方向?…

重磅推荐!GBD再度登顶Lancet!| GBD数据库周报(7.17~7.23)

全球疾病负担(GBD)是迄今为止规模最大、最全面的一项研究,旨在量化不同地区和不同时期的健康损失,从而改善卫生系统并消除差异。 该研究由华盛顿大学健康指标与评估研究所 (IHME) 牵头,是一项真正的全球性研究&#xf…

MySQL--数据库与表的操作

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 数据库的基本操作 # 1、查看数据库show databases;​# 2、创建数据库create database 数据库名称;​# 3、删除数据库drop databse 数据库名称; 数据表…

RAC(Teamcenter )开发,Bom行解包和打包的方法

1、打包 UnpackAllAction allAction new UnpackAllAction((AbstractBOMLineViewerApplication) currentApplication, "packAllAction"); new Thread(allAction).start();2、解包 UnpackCommand command new UnpackCommand(bomLine); command.executeModal();3、注…

Marin说PCB之Orcad Capture调网表时出现了“Duplicate Pin Name”该怎么搞?

最近大巴黎在如火如荼的举行着奥运会,中国健儿们也是不负众望在很多项目中取得金牌的好成绩,其中中国选手陈芋汐/全红婵夺得巴黎奥运会跳水女子双人10米台金牌,其实没有看我就知道比赛的结果了,肯定是我们中国队夺得金牌的。 看到…

月薪竟然高达60k,AI大模型凭什么?

你是不是最近经常看到或听到“AI大模型”这个关键词?我也是!所以好奇去Boss直聘上搜了下工作机会。看到结果时,我有点不淡定了!薪资竟然这么高! 这是我随便搜的结果,发出来给大家看看。 下面,我…

多线程习题

1.使用两个线程完成两个文件的拷贝&#xff0c;分支线程1拷贝前一半&#xff0c;分支线程拷贝后一般&#xff0c;主线程回收两个分支线程的资源 #include<myhead.h> struct Buf {const char *srcfile;const char *destfile;int start;int len1; }; //创建求源文件大小的函…

【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据

欢迎来到《小5讲堂》 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景读取并保存NPOI信息NPOI 插件介绍基本功能示例代码写入 Excel 文件…

继电器测试中常见的故障和解决方法有哪些?

在继电器测试中&#xff0c;可能会遇到诸如电源问题、负载问题、控制系统问题和显示问题等故障。如果电源电压不稳定或波动过大&#xff0c;可能会导致继电器测试负载箱无法正常工作。此时需要检查电源线路&#xff0c;确保电源电压稳定在规定范围内。如有必要&#xff0c;可以…

详细说明Java中Map和Set接口的使用方法

Map与Set的基本概念与场景 Map和set是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有&#xff1a; 1. 直接遍历&#xff0c;时间复杂度为O(N)&#xff0c;元素如果比较多效率会非常慢。 2. 二分查找&#x…

PSINS工具箱函数介绍——insinit

insinit是初始化INS系统的函数 函数需要用到PSINS工具箱&#xff0c;关于工具箱的一些入门知识&#xff0c;参考这篇文章&#xff0c;是关于工具箱的讲解&#xff1a; PSINS初学指导&#xff1a;https://blog.csdn.net/callmeup/article/details/137087932 函数使用方法 正…

vulhub:Apache解析漏洞apache_parsing

在Apache1.x/2.x中Apache 解析文件的规则是从右到左开始判断解析&#xff0c;如果后缀名为不可识别文件解析&#xff0c;就再往左判断。如 1.php.xxxxx 漏洞原理 Apache HTTPD 支持一个文件拥有多个后缀&#xff0c;并为不同后缀执行不同的指令。比如如下配置文件 AddType te…

蓝牙网关北京厂家_蓝牙网关型号价格介绍

蓝牙网关北京厂家介绍&#xff1a;北京桂花网科技有限公司成立于2015年&#xff0c;开发了远距离蓝牙网关&#xff0c;重新定义了蓝牙&#xff0c;拓展了蓝牙的应用范围&#xff0c;在2016年1月的拉斯维加斯世界消费电子CES展会上一举夺得Best of CES创新大奖。随后&#xff0c…

操作系统_内存管理学习心得

1. 操作系统结构 1.1 内核 计算机是由各种外部硬件设备组成的,比如内存、cpu、 硬盘等,如果每个应用都要和这些硬件设备对接通信协议&#xff0c;那这样太累了&#xff0c;所以这个中间人就由内核来负责,让内核作为应用连接硬件设备的桥梁,应用程序只需关心与内核交写&#x…

day19Tomcat

1. Tomcat启动服务 1. 使用命令&#xff1a; /usr/local/tomcat/bin/startup.sh 启动Tomcat服务。 2. 使用命令&#xff1a; netstat -lnput|grep java 查看端口状态&#xff0c;可以看到8080和8005两个端口。 3. 使用命令&#xff1a; /usr/local/tomcat/bin/shutdown.sh 停止…

用18讲必看:宇哥亲划重点内容+核心题总结

25考研结束之后&#xff0c;张宇老师的风评可能会两极分化 其中一波把张宇老师奉为考研数学之神&#xff0c;吹捧「三向解题法」天下无敌。 另外一波对张宇老师的评价负面&#xff0c;在网上黑张宇老师&#xff01; 为什么会这么说&#xff0c;因为张宇老师的新版36讲争议太…

【八股文】并发编程相关考点

1.线程和进程和协程的区别 进程是操作系统中资源分配和调度的基本单位&#xff0c;是程序的一次执行过程&#xff0c;因此是动态的&#xff0c;即一个进程从创建到运行再到消亡。每个进程都有独立的内存空间&#xff0c;一位置一个进程的变量修改不会影响到其他经常。进程之间的…

大数据HBase图文简介

往期推荐 数据仓库及数仓架构概述-CSDN博客 数仓常见名词解析和名词之间的关系-CSDN博客 引言 要想明白为什么产生 HBase&#xff0c;就需要先了解一下 Hadoop 存在的限制&#xff1a;Hadoop 可以通过 HDFS 来存 储结构化、半结构甚至非结构化的数据&#xff0c;是传统数据库的…

LeetCode 965.单值二叉树 C写法

LeetCode 965.单值二叉树 C写法 思路&#x1f9d0;&#xff1a; 用前序遍历的方式&#xff0c;如果左结点或右结点不为空且值不相等就直接返回false&#xff0c;如果走完一颗子树&#xff0c;结点为空了就返回true到上一层递归&#xff0c;直到左右子树全部走完&#xff0c;全为…

深入理解PreparedStatement

预处理 Overridepublic boolean login(String username, String userpwd) {Connection con DBUtils.getConnection();try {if(con ! null){PreparedStatement pstmt con.prepareStatement("select username,userpwd from " " users where username? and us…