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

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

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

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语句,并且要有创建存储过程的权限。但是使用存储过程可以在实际开发中简化操作,减少冗余的操作步骤,同时还可以减少过程中的失误,提高效率,因此存储过程是非常有用的,应该学会使用,并熟练运用。

 

相关文章:

  • 【ESP8266】macos 下 sdk 环境搭建
  • 第二届金牌导游大赛活动方案
  • 士兰微 SC32F5432 通过配置寄存器方式 将管脚配成开漏输出模式和TTL输入模式
  • Kafka【十四】生产者发送消息时的消息分区策略
  • 地理位置编码GeoHash编码 介绍
  • flutter之常用数据类型
  • CSS3动画——飞行的小精灵
  • 3.创建型设计模式详解:生成器模式与原型模式的深度解析
  • 用MobaXterm工具的Linux远程SSH登录
  • 文本字符分割算法尝试
  • 磁盘调度管理中移臂调度和旋转调度
  • react 使用Ant Design中DatePicker设置mode=“year“无法获取value
  • 自动驾驶---什么是Frenet坐标系?
  • [数据集][目标检测]水面垃圾检测数据集VOC+YOLO格式2027张1类别
  • 通过redis-operator 来部署 Redis Cluster 集群
  • GIT使用常见问题
  • 【Linux 从基础到进阶】MongoDB 数据库安装与调优
  • Java笔试面试题AI答之正则表达式(3)
  • Java中的TCP/IP与UDP协议Socket入门
  • linux~~目录结构远程登录教程(xshell+xftp)
  • 走访中广核风电基地:701台风机如何乘风化电,点亮3000万人绿色生活
  • 上海112位全国劳动模范和先进工作者接受表彰,樊振东榜上有名
  • 普京发表声明感谢协助俄军收复库尔斯克州的朝鲜军人
  • 见证上海援藏30年成果,萨迦非遗珍品展来沪
  • 十大券商看后市|A股风险偏好有望边际改善,市场仍处黄金坑
  • 因高颜值走红的女通缉犯出狱后当主播自称“改邪归正”,账号已被封