MySQL学习笔记(十五)存储过程

MySQL学习笔记8:MySQL存储过程(storage procedure) MySQL存储过程语法解析 创建/调用/删除存储过程 阅读详情

1. 一般输入指令时的执行过程如下所示:

SQL指令-->MySQL引擎-->(分析)语法正确-->(编译)可识别命令-->(执行)执行结果-->(返回)客户端

2. 存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理。效率高于简单的SQL语句,因为只在第一次进行检查和编译,后续直接查看编译结果即可,省略了中间的两个环节。

3. 存储过程的特点

(1) 增强SQL语句的功能和灵活性

(2) 实现较快的执行速度

(3) 减少网络流量

4. 创建存储过程

CREATE [DEFINER = {user | CURRENT_USER}] PROCEDURE sp_name ([parameter [,...]]) [characteristic ...] routine_body

(1) 其中过程参数pro_parameter:[IN | OUT |INOUT] parameter_name types

IN:表示该参数的值必须在调用存储过程时指定

OUT:表示该参数的值可以被存储过程改变,并且可以返回

INOUT:表示该参数在调用时指定,并且可以被改变和返回

(2) 特性:

COMMENT 'string' | {CONSTRAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA} | SQL SECURITY {DEFINER | INVOKER}

5. 过程体

(1) 过程体由合法的SQL语句构成

(2) 过程体可以是“任意”SQL语句,“任意”针对数据表的增、删、改、查及多表连接语句

(3) 过程体如果为复合结构,则使用BEGIN ... END语句

(4) 复合结构可以包含声明、循环、控制结构

6. 调用存储过程的方法有两种:

(1) CALL sp_name([parameter [,...]]),对应当存储过程带有参数

(2) CALL sp_name[()],对应创建没有参数的存储过程

7. 创建不带参数的存储过程

//该存储过程欲实现获取MySQL版本的信息

CREATE PROCEDURE sp1()

BEGIN

SELECT VERSION();

END

//调用存储过程

CALL sp1();//等价于CALL sp1;

 

8. 创建带有IN参数的存储过程

//切换结束标识

DELIMITER //

//创建存储过程,注意IN对应的参数名不能和数据表中的记录字段名相同

CREATE PROCEDURE removeUserById(IN p_id INT UNSIGNED)

BEGIN

DELETE FROM users WHERE id = p_id;

END

DELIMITER ;

//调用存储过程

CALL removeUserById(3);

9. 修改存储过程,注意不能修改过程体

ALTER PROCEDURE sp_name [characteristic ...]

10. 删除存储过程

DROP PROCEDURE [IF EXISTS] sp_name;

11. 创建带有IN和OUT类型参数的存储过程

DELIMITER //

CREATE PROCEDURE removeUserAndReturnUserNums(IN p_id INT UNSIGNED, OUT userNums INT UNSIGNED)

BEGIN

DELETE FROM users WHERE id = p_id;

SELECT COUNT(id) FROM users INTO userNums; //将统计结果放入变量中

END

DELIMITER ;

//调用:

CALL removeUserAndReturnUserNums(27,@nums);

SELECT @nums;

注意:

(1) 在BEGIN与END之间DECLARE声明的变量都是局部变量,而且声明语句必须位于第一行,作用范围也在BEGIN与END之间

(2) SEt @i = 7;其中i指的是用户变量,与MySQL客户端绑定,因此只对用户所使用的客户端有效。

12. 创建带有多个OUT类型参数的存储过程

ROW_COUNT();语句的作用是获取插入、删除、更新被影响到的记录总数

//创建存储过程,根据年龄删除用户,并返回删除用户数及剩余的用户数

DELIMITER //

CREATE PROCEDURE removeUserByIdAndReturnInfos(IN p_age SMALLINT UNSIGNED NOT NULL, OUT deleteUsers SMALLINT UNSIGNED, OUT userCounts SMALLINT UNSIGNED)

BEGIN

DELETE FROM users WHERE age = p_age;

SELECT ROW_COUNT() INTO deleteUsers;

SELECT COUNT(id) FROM users INTO userCounts;

END

DELIMITER ;

//访问该存储过程

CALL removeUserByIdAndReturnInfos(20,@a,@b);

SELECT @a,@b;

13. 存储过程与自定义函数的区别

(1) 存储过程的功能要复杂一些,自定义函数针对性更强

(2) 存储过程可返回多个值,自定义函数只能返回一个值

(3) 存储过程一般独立运行,自定义函数可做为其他SQL语句的组成部分来实现。

高分系列卫星轨道、传感器参数等信息 遥感卫星数据简介-高分系列 阅读详情

相关推荐

c语言面试5(希诺麦田)

在 C 语言中,当使用strlen函数计算字符串的长度时,它会返回字符串中字符的实际个数,不包括字符串结束符’\0’。而sizeof(array)返回的是array指针所占用的字节数,通常在 32 位系统上为 4 个字节,在 64 位系统上为 8 个字节。在给定的代码中,array被初始化为"\0\0",其中包含两个转义字符’\0’。当使用strlen函数计算array的长度时,它会遇到第一个’\0’并停止计数,因此返回的长度为 2。12.下面四个选项是四个整数在内存中的存储情况,其中数值最大的一个是。

Pierce110110的博客 1053

【SQL】持久性存储模块PSM

1. 创建PSM函数和过程 创建过程: CREATE PROCEDURE 名字 (参数)   局部声明;   过程体; 创建函数:   CREATE FUNCTION 名字 (参数) RETURNS 类型     局部声明;     过程体;   过程的参数:模式-名字-类型的三元组。模式有 IN, OUT, INOUT,默认为IN 函数的参数:只能是IN。   ...

weixin_34138521的博客 474

D类功放几种常见“爆破音”问题根源与改善措施

在数字D类功放刚上电或功放播放状态切换时,人耳偶尔会听到“嘣”的声音,我们把这个爆破的Pop Noise。数字功放Pop Noise 出现的原因有很多,本文主要分析Pop Noise 出现原因,并提供相应解决方法。

qq_26815321的博客 3591

MySQL存储过程

目录 一、存储过程 1.1什么是存储过程 1.2存储过程的优缺点 二、创建存储过程 2.1语法与特性: 2.2声明语句分隔符 2.3过程体的标识 2.4存储过程参数设置 三、存储过程中的变量 四、MySQL变量 五、设置用户执行存储过程的权限 六、查看存储过程的状态 七、查看存储过程的创建代码 八、修改存储过程 九、删除存储过程 十、存储过程的控制语句 十一、IF-ELSEIF-ELSE条件语句 十二、CASE条件语句 十三、WHILE循环语句 十四、LOOP循环语句

ReincarnationArm的博客 2万+

计算机视觉之姿态识别(原理+代码实操)

计算机视觉中的姿态识别原理+模型介绍,同时通过代码实操简单的演示基于mediapipe的单人姿态识别。

输出既学习 3万+

公文派2025:免费社区版重大安装更新!

距离上一次更新已经过去了将近一年的时间,今天我们带来了全新的免费2025社区版,该版本也是目前最新的版本,无需授权即可使用所有的功能。

似最初 1963

十五、存储过程与函数

这篇文章详细介绍了MySQL存储过程和函数的概念、优点、创建、调用、调试、修改、删除,以及它们之间的比较。存储过程是一组预编译的SQL语句,可以简化操作、提高效率、减少网络传输量,并增强数据安全性。文章还探讨了存储过程的参数类型、分类,并提供了创建和调用存储过程的语法和示例。同时,也讨论了存储函数的创建和使用,以及如何通过`information_schema`数据库查看存储过程和函数的信息。最后,文章分析了存储过程使用的争议,包括其优点和缺点,指出尽管存在局限性,但掌握存储过程是数据库开发的重要技能。

weixin_44063529的博客 1693

Boot过程相关镜像详解:IVT、DCD、App Boot镜像到底是什么?

S32系列芯片中常说的IVT镜像、DCD镜像等跟Boot过程相关的镜像到底是什么,镜像结构长啥样?各镜像作用是什么?主分区和备份区的概念?答案统统在这里!!

车载系统攻城狮 4252

MySQL学习笔记-06(存储过程)

存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,提高数据处理的效率;

weixin_41016739的博客 1565

光学系统仿真软件:Finesse_(6).噪声分析与优化

在Finesse中,噪声源的定义可以通过在光学元件的参数中添加噪声项来实现。以下是一个简单的示例,展示了如何在激光器和反射镜中定义噪声源。# 定义噪声传递函数# 绘制噪声传递函数plot NTF1在这个例子中,定义了一个噪声传递函数NTF1,描述了激光器L1到反射镜M1的噪声传递过程。plot NTF1命令绘制了噪声传递函数的频谱图。# 定义耦合路径# 绘制耦合噪声频谱图plot C1在这个例子中,定义了一个耦合路径C1,描述了激光器L1和反射镜M1之间的噪声耦合关系。plot C1。

kkchenjj的博客 873

NL2SQL实践系列(1):深入解析Prompt工程在text2sql中的应用技巧

NL2SQL实践系列(1):深入解析Prompt工程在text2sql中的应用技巧

丨汀、的博客 4327

MySQL数据库,从入门到精通:第十五篇——MySQL存储过程和函数详解

本文将主要分为6个部分,分别对MySQL中的存储过程和函数进行了详细讲解。首先介绍了存储过程的概述,包括存储过程的定义、分类和作用等。接着详细讲解了如何创建存储过程和调用存储过程,并给出了相关的代码示例和调试技巧。同时对存储函数也进行了介绍,包括函数的定义、调用和与存储过程的对比等。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 1万+

Mastercam软件二次开发:使用C#进行Mastercam二次开发

C#(发音为“C Sharp”)是一种现代、面向对象的编程语言,由微软开发,首次发布于2000年。它结合了C和C++的强大功能,同时引入了Java的垃圾回收机制,使得C#在开发效率和运行性能之间找到了一个良好的平衡点。C#的设计目标是提高开发者的生产力,它支持多种编程范式,包括面向对象、泛型、委托和事件等,这使得它成为开发Windows应用程序、Web应用程序、游戏(尤其是使用Unity引擎)和企业级应用的理想选择。

kkchenjj的博客 2214

MySQL的存储过程

局部变量用户自定义,在begin/end块中有效begin--声明/定义变量--给变量赋值--输出变量的值end$$dilimiter;用户变量用户自定义,当前会话(连接)有效.类比java的成员变量beginend$$dilimiter;--外部也是可以使用用户变量。...

m0_67392273的博客 7115

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

MySQL 学习笔记 1:存储过程

本文介绍如何创建和使用 MySQL 的存储过程。本文使用可视化数据库连接工具 SQLyog 连接数据库操作,该工具的下载安装可以通过。当然,这并非必须。使用其他客户端(比如命令行客户端)都可以完成文中的相关 SQL 执行。

梦幻天空 1887

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【MySQL学习笔记】MySQL存储过程

用户自定义变量是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用 “@变量名” 使用就可以了。其作用域为当前连接。-- 使用 set 方式赋值-- 推荐使用 ':=' 进行赋值。因为 MySQL 中的赋值运算符和比较运算符都是 '=',为了区分,推荐使用 ':='-- 使用 select 方式赋值-- 将 table_name 表中的 column_name 字段的值赋值给 @var_name 变量。

wrjwww的博客 1131

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

MySQL 05 存储过程

MySQL 05 存储过程 文章目录MySQL 05 存储过程一、学习目标二、存储过程2.1为什么需要使用存储过程2.2什么是存储过程2.3存储过程的优缺点三、创建存储过程3.1语法与特性:3.2声明语句分隔符3.3过程体的标识3.4存储过程参数设置3.5创建、调用存储过程示例四、存储过程中的变量五、MySQL变量六、用户变量在存储过程间传递七、Navicat中创建、调用存储过程八、设置用户执行存储过程的权限九、查看存储过程的状态查看数据库中已创建的存储过程查看hosptal数据库中创建的存储过程十、查

云哥的博客 5274

什么是mysql存储过程_mysql 存储过程

存储过程1.什么是存储过程一组可编程函数,是为了满足特定功能的SQL语句集存储过程就是具有名字的一段代码,用来完成个特定的功能创建的存储过程保存在数据库的数据字典中​2.为什么要用存储过程将重复性很高的操作,封装到一个存储过程中,简化了对这些SQL的调用批量处理统一接口,确保数据安全相对于Oracle来说,Mysql的存储过程相对功能较弱,使用较少​3.存储过程的创建和调用1. delimiter...

weixin_31470259的博客 9106

MySQL基础(十五)存储过程与函数

存储过程的思想很简单,就是一组经过预先编译的 SQL 语句的封装。执行过程:存储过程预先存储在 MySQL 服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列 SQL 语句全部执行。好处1、简化操作,提高了sql语句的重用性,减少了开发程序员的压力2、减少操作过程中的失误,提高效率3、减少网络传输量(客户端不需要把所有的 SQL 语句通过网络发给服务器)

zhufei463738313的博客 1131

MySQL存储过程详解 mysql 存储过程

mysql存储过程详解 1.存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做

qq_28807077的博客 2779

MySQL学习笔记(九)-MySQL存储过程

MySQL学习笔记(九)-存储过程 作者:就叫易易好了 日期:2020/12/01 好处:提高代码的重用性,简化操作 储存过程: 含义:一种预先编译好的SQL语句的集合,理解成批处理语句。 好处: 提高了代码的重用性 简化操作 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率。 一、创建存储过程 create procedure 存储过程名(参数列表) begin 存储过程体(一组合法的SQL语句) END 注意: 参数列表包含三部分,参数模式,参数名,参数类型 参数模式:

m0_48834053的博客 221

mysql 存储过程 replace_mysql 存储过程 create or replace

MySQL和Oracle对比之存储过程昨天晚上帮一个朋友处理了一个关于存储过程的问题,他需要迁移一些Oracle中的存储过程到MySQL中来,但是改了一部分的程序,发现MySQL中没法编译了,报了很多的错误。这个问题也比较典型,自己就趁热打铁总结了一下。因为隐私的关系还有代码长度的关系,我就不罗列代码了。假设Oracle中的存储...文章jeanron1002015-04-15792浏览量MySQ...

weixin_35876682的博客 4636

mysql存储过程调试_MYSQL存储过程调试过程

mysql不像oracle有plsqldevelper工具用来调试存储过程,所以有几种简单的方式追踪执行过程:1、用一张临时表,记录调试过程;2、直接在存储过程中,增加select xxx,在控制台查看结果:3、把存储过程的sql复制到navicat查询中,然后SET @num使用自定义变量。实际应用场景是三种方法都会用到,结合不同的场景使用。方法1适用于有多条数据处理,处理结果无法通过变量来存储...

weixin_34954308的博客 3790

mysql存储过程连接远程数据库_MYSQL学习笔记——连接以及存储过程

连接当我们需要从多个表查询数据时,我们就需要使用到连接操作,mysql支持内连接,左连接以及右连接三种连接方式。数据库准备首先我们创建两个表t1, t2:create table t1(i1 int, c1 varchar(10));create table t2(i2 int, c2 varchar(10));插入数据:insert into t1 values (1, 'a'), (2, 'b...

weixin_29928971的博客 3369

mysql fetch 存储过程_【MySQL】存储过程及游标的使用

1. 写在前面本篇内容及部分示例代码基于《MySQL必知必会》,所需要获得和运行的一切东西,可以在http://www.forta.com/books/0672327120/ 上找到,包括两个SQL脚本,create.sql 和 populate.sql。本篇内容的理解同时也参考了MySQL8.0的官方文档《MySQL 8.0 Reference Manual》,若有理解不到位的地方,有能力的小...

weixin_33557333的博客 1358

MySQL 学习笔记(六) 存储过程

文章目录MySQL学习笔记 存储过程Stored Procedure 存储过程CREATE PROCEDURE 创建存储过程DROP PROCEDURE 删除存储过程CALL Procedure 调用存储过程Parameters 在创建存储过程中传递参数使用案例IF 在存储过程中写逻辑SIGNAL SQLSTATE 在存储过程中验证数据OUT 在存储过程中选择返回结果 (不建议使用,除非有明确理由) MySQL学习笔记 存储过程 Stored Procedure 存储过程 存储过程就是在数据库中保存代码块的

DackSnowden 554
上一篇: MySQL学习笔记(十四)自定义函数
下一篇: TCP/IP浅谈
mengrennwpu
博客等级 码龄15年 262粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mengrennwpu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值