首页 > 数据库 >MySQL——事务与存储过程(四)综合案例——存储过程应用

MySQL——事务与存储过程(四)综合案例——存储过程应用

时间:2024-09-05 08:57:01浏览次数:11  
标签:count 存储 cur mysql stu MySQL 过程 id

        通过一个应用案例让读者熟悉在实际开发中,创建并使用存储过程的完整过程。

1.创建一个 stu 表

stu表结构

字段名数据类型主键外键非空唯一自增
idINT(10)
nameVARCHAR(50)
classVARCHAR(50)


stu表数据

idnameclass
1Lucyclass1
2Tomclass1
3Roseclass2

        在数据库 chapter06 中创建表 stu,并向表中添加数据,SQL语句具体如下:

CREATE TABLE stu(id INT,name VARCHAR(50),class VARCHAR(50));
INSERT INTO stu VALUE (1, 'Lucy', 'class1'), (2, 'Tom', 'class1'), (3, 'Rose','class2');

        通过 DESC 命令查看表 stu结构,执行结果如下:

mysql> DESC stu;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
| class | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.02 sec)

        通过 SELECT * FROM stu 来查看表数据,执行结果如下:

mysql> SELECT * FROM stu;
+------+------+--------+
| id   | name | class  |
+------+------+--------+
|    1 | Lucy | class1 |
|    2 | Tom  | class1 |
|    3 | Rose | class2 |
+------+------+--------+
3 rows in set (0.00 sec)

2.创建一个存储过程

CREATE PROCEDURE addcount (out count INT)
BEGIN
DECLARE itmp INT;
DECLARE cur_id CURSOR FOR SELECT id FROM stu;
DECLARE EXIT HANDLER FOR NOT FOUND CLOSE cur_id;
SELECT count(*)INTO count FROM stu;
SET @sum=0;
OPEN cur_id;
REPEAT
FETCH cur_id INTO itmp;
IF itmp<10
THEN SET @sum=@sum+itmp;
END IE;
UNTIL 0 END REPEAT;
CLOSE cur_id;
END;

        创建一个存储过程 addcount 能够获取表 stu 中的记录数和 id 的和,代码格式如下:
        上面的创建存储过程的代码中使用到了变量的声明、光标、流程控制等知识点。SQL语句的执行情况如下:

mysql> DELIMITER //
mysql> CREATE PROCEDURE addcount (out count INT)
    -> BEGIN
    -> DECLARE itmp INT;
    -> DECLARE cur_id CURSOR FOR SELECT id FROM stu;
    -> DECLARE EXIT HANDLER FOR NOT FOUND CLOSE cur_id;
    -> SELECT count(*)INTO count FROM stu;
    -> SET @sum=0;
    -> OPEN cur_id;
    -> REPEAT
    -> FETCH cur_id INTO itmp;
    -> IF itmp<10
    -> THEN SET @sum=@sum+itmp;
    -> END IF;
    -> UNTIL 0 END REPEAT;
    -> CLOSE cur_id;
    -> END //
Query OK, 0 rows affected (0.00 sec)

mysql> CALL addcount(@count) //
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @count,@sum //
+--------+------+
| @count | @sum |
+--------+------+
|      3 |    6 |
+--------+------+
1 row in set (0.00 sec)

mysql> DELIMITER;

        从调用存储过程的结果可以看出,stu表中共有三条数据,id之和为6。这个存储过程创建了一个 cur_id 的光标,使用这个光标来获取每条记录的 id,使用 REPEAT 循环语句来实现所有 id号相加。

        本案例演示了一个完整的存储过程,从设计表结构、创建表、创建存储过程到调用存储过程达到预想的查询结果。编写存储过程并不是件简单的事情,根据不同的业务需求可能会需要非常复杂的 SQL语句,并且要有创建存储过程的权限。但是使用存储过程可以在实际开发中简化操作,减少冗余的操作步骤,同时还可以减少过程中的失误,提高效率,因此存储过程是非常有用的,应该学会使用,并熟练运用。

 

标签:count,存储,cur,mysql,stu,MySQL,过程,id
From: https://blog.csdn.net/W_Fe5/article/details/141781476

相关文章

  • MySQL——事务与存储过程(二)存储过程的创建(5)流程控制的使用
        在编写存储过程时还有一个非常重要的部分——流程控制。流程控制语句用于将多个SQL语句划分或组合成符合业务逻辑的代码块。MySQL中的流程控制语句包括:IF语句、CASE语句LOOP语句、WHILE语句、LEAVE语句、ITERATE语句、REPEAT语句和WHILE语句。     ......
  • mysql 8.0 的 建表 和八种 建表引擎实例
    文章目录MySQL8.0中,主要有以下八种常见的建表引擎一、InnoDB引擎建表注意点建表知识点二、MyISAM引擎建表使用场景三、Memory引擎使用场景四、Archive引擎五、BLACKHOLE引擎一、特点二、适用场景三、注意事项六、MRG_MyISAM引擎MRG_MyISAM和MyISAM的区别......
  • 第十讲:为什么我的MySQL会“抖”一下?
    目录第十讲:为什么我的MySQL会“抖”一下?图概:提出现实问题:SQL执行的时候特别快,有时变得特别慢原因:为什么有时会“flush”呢?第一种场景,粉板满了,记不下了。第二种场景,要记住的事情太多,自己快记不住了,找账本把这笔账先加进去。第三种场景是,生意不忙,打烊之后柜台没事,掌柜闲着也是闲......
  • MySQL常用窗口函数总和
    在MySQL中,窗口函数是一类用于在查询结果集中计算值的函数,允许用户根据数据行进行聚合或排序操作,同时保留行的详细信息。窗口函数在分析数据时非常有用,因为它们允许您在不缩小结果集的情况下对数据进行复杂的计算。常见的窗口函数包括:ROW_NUMBER()RANK()DENSE_RANK()NTILE(......
  • 网络传输的大致过程
    互联网世界,人们可以通过网络传输解除地域限制,实现消息的通信。那么网络传输的整体流程到底是怎么实现的呢?比如小王在他的电脑浏览器上输入了一个网址,经过网络传输,目标服务器收到了来自小王的请求,并响应了内容给小王。整个过程就涉及了两次网络传输,一次请求,一次响应。查看代码......
  • MySQL insert sql 返回自增id
    xml<insertid="addMain"useGeneratedKeys="true"keyColumn="id"keyProperty="id"parameterType="com.hopedove.coreserver.vo.vpm.ForeignTradeOutboundOrderVO">insertintoaps_foreign_trade_ex......
  • Linux宝塔Mysql两台服务器主从配置,服务器存在多个库
    实现目标:两台服务器(一台为从服务器,一台为主服务器),当主服务器的数据修改,从服务器复制主服务器的操作,实现自动修改数据;1、主数据库操作-先登录主数据库#登录数据库,用root登录方便,用其他账号会提示权限不足,需要登录root给予权限mysql-uroot-p密码2、创建一个账号,供从库用......
  • 依托自研力量,给共享集群存储服务一个优选
    YashanDB共享集群有三大关键组件,崖山集群服务(YCS)、崖山集群文件系统(YFS)、DB组件。上一篇共享集群系列文章《为何共享集群的高可用能力被频频称赞,它的机制有何不同?》深入解析了关键组件的高可用机制与核心技术,本文将深入探讨崖山集群文件系统(YFS)关键技术和特性,并阐释我们选择自主研......
  • 对象存储服务器有什么作用
    对象存储服务器(ObjectStorageServer)是专为存储、管理和检索大量非结构化数据(如文档、图片、音频、视频等)设计的存储解决方案。以下是对象存储服务器的主要作用:1.存储大量非结构化数据对象存储能够高效地处理和存储大量的非结构化数据,这是传统文件系统或块存储难以比拟的。2.数......
  • 保姆级教程:Dupay从注册到充值开卡全过程,可开GPT Plus、可绑定GPT充值API余额
    前言想要购买GPTPlus,或者给GPT充值,绑定国内visa信用卡,会被拒,于是便问问度娘,找到了一篇关于注册虚拟卡的教程,搬过来顺便修改下!应用场景1、DepayMasterVisa卡支持绑定宝、微、美外卖、拼多、Paypal(国区、美区、港区)、天猫国际版等等。2、支持Stripe商户、googleplay商......