返回顶部
首页 > 资讯 > 数据库 >MySQL存储过程的创建、调用与管理详解
  • 778
分享到

MySQL存储过程的创建、调用与管理详解

2024-04-02 19:04:59 778人浏览 泡泡鱼
摘要

目录存储过程简介为什么要用存储过程?存储过程的优点存储过程的缺点 Mysql 中的存储过程创建与调用过程存储过程语法解析存储过程的参数变量变量赋值流程控制语句if 条件语句case

存储过程简介

为什么要用存储过程?

mysql5.0 版本开始支持存储过程。

大多数 sql 语句都是针对一个或多个表的单条语句。并非所有的操作都那么简单。经常会有一个完整的操作需要多条语句才能完成。

存储过程简单来说,就是为以后的使用而保存的一条或多条 MySQL 语句的集合。可将其视为批处理文件。虽然他们的作用不仅限于批处理。

存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

存储过程的优点

  1. 通过把处理封装在容易使用的单元中,简化复杂的操作;
  2. 简化对变动的管理。如果表名、列名或业务逻辑有变化。只需要更改存储过程的代码,使用它的人员不会改自己的代码;
  3. 通常存储过程有助于提高应用程序的性能。当创建的存储过程被编译之后,就存储在数据库中。 但是,MySQL 实现的存储过程略有不同。MySQL 存储过程按需编译。在编译存储过程之后,MySQL 将其放入缓存中。MySQL 为每个连接维护自己的存储过程高速缓存。如果应用程序在单个连接中多次使用存储过程,则使用编译版本,否则存储过程的工作方式类似于查询;
  4. 存储过程有助于减少应用程序和数据库服务器之间的流量,因为应用程序不必发送多个冗长的 SQL 语句,而只用发送存储过程的名称和参数;
  5. 存储的程序对任何应用程序都是可重用的和透明的。存储过程将数据库接口暴露给所有应用程序,以便开发人员不必开发存储过程中已支持的功能;
  6. 存储的程序是安全的。数据库管理员可以向访问数据库中存储过程的应用程序授予适当的权限,而不向基础数据库表提供任何权限。

存储过程的缺点

  1. 如果使用大量存储过程,那么使用这些存储过程的每个连接的内存使用量将会大大增加。 此外,如果您在存储过程中过度使用大量逻辑操作,则 CPU 使用率也会增加,因为 MySQL 数据库最初的设计侧重于高效的查询,不利于逻辑运算;
  2. 存储过程的构造使得开发具有复杂业务逻辑的存储过程变得更加困难;
  3. 很难调试存储过程。只有少数数据库管理系统允许您调试存储过程。不幸的是,MySQL 不提供调试存储过程的功能;
  4. 开发和维护存储过程并不容易。开发和维护存储过程通常需要一个不是所有应用程序开发人员拥有的专业技能。这可能会导致应用程序开发和维护阶段的问题。

MySQL 中的存储过程

创建与调用过程

创建存储过程,代码如下所示:


-- 创建存储过程 
create procedure mypro(in a int,in b int,out sum int) 
begin 
set sum = a+b; 
end;

运行结果如下

image-20210316103451673

也可以在 Navicat 客户端“函数”节点下查看过程,如下图所示:

image-20210316103523273

调用存储过程,代码如下所示:


call mypro(1,2,@s);-- 调用存储过程 
select @s;-- 显示过程输出结果

运行结果

image-20210316103610471

存储过程语法解析

  • create procedure 用来创建过程;
  • mypro 用来定义过程名称;
  • (in a int,in b int,out sum int)表示过程的参数,其中 in 表示输入参数,out 表示输出参数。类似于 Java 定义方法时的形参和返回值;
  • begin 与end 表示过程主体的开始和结束,相当于 Java 定义方法的一对大括号;
  • call用来调用过程,@s 是用来接收过程输出参数的变量

存储过程的参数

MySQL 存储过程的参数用在存储过程的定义,共有三种参数类型:

  • IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量);
  • OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量);
  • INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)。

存储过程根据参数可分为四种类别:

1).没有参数的过程;

2).只有输入参数的过程;

3).只有输出参数的过程;

4).包含输入和输出参数的过程。

变量

MySQL 中的存储过程类似 java 中的方法。

既然如此,在存储过程中也同样可以使用变量。java 中的局部变量作用域是变量所在的方法,而 MySQL 中的局部变量作用域是所在的存储过程。

变量定义


DECLARE variable_name [,variable_name...] datatype [DEFAULT value];

declare用于声明变量;

variable_name表示变量名称;

datatype为 MySQL 的数据类型;

default用于声明默认值;

例如:


declare name varchar(20) default ‘jack'。

变量赋值


SET 变量名 = 表达式值 [,variable_name = expression ...]

在存储过程中使用变量,代码如下所示


use schooldb;-- 使用 schooldb 数据库
-- 创建过程
create procedure mypro1()
begin
declare name varchar(20);
set name = '丘处机';
select * from studentinfo where studentname = name;
end;
-- 调用过程
call mypro1();

运行结果

image-20210316104419334

流程控制语句

if 条件语句

IF 语句包含多个条件判断,根据结果为 TRUEFALSE执行语句,与编程语言中的 ifelse ifelse 语法类似。

定义存储过程,输入一个整数,使用 if 语句判断是正数还是负数,代码如下所示:


-- 创建过程
create procedure mypro2(in num int)
begin
if num<0 then -- 条件开始
select '负数';
elseif num=0 then
select '不是正数也不是负数';
else
select '正数';
end if;-- 条件结束
end;
-- 调用过程
call mypro2(-1);

运行结果

image-20210316104810016

case 条件语句

case是另一个条件判断的语句,类似于编程语言中的 choosewhen语法。MySQL 中的 case语句有两种语法
格式。

定义存储过程,输入一个整数,使用 case 语句判断是正数还是负数,代码如下所示:


-- 创建过程
create procedure mypro3(in num int)
begin
case -- 条件开始
when num<0 then select '负数';
when num=0 then select '不是正数也不是负数';
else select '正数';
end case; -- 条件结束
end;
-- 调用过程
call mypro3(1);

运行结果

image-20210316104934579

定义存储过程,输入一个整数,使用 case 语句判断是 1 还是 2,代码如下所示:


-- 创建过程
create procedure mypro4(in num int)
begin
case num -- 条件开始
when 1 then select '数值是 1';
when 2 then select '数值是 2';
else select '不是 1 也不是 2';
end case; -- 条件结束
end;
-- 调用过程
call mypro4(3);

运行结果

image-20210316105009743

两种 case 语法都可以实现条件判断,但第一种适合范围值判断,而第二种适合确定值判断。

while 循环语句

while语句的用法和 java中的 while循环类似。

定义存储过程,使用 while 循环输出 1 到 10 的累加和,代码如下所示:


-- 创建过程
create procedure mypro5(out sum int)
begin
declare num int default 0;
set sum = 0;
while num<10 do -- 循环开始
set num = num+1;
set sum = sum+num;
end while; -- 循环结束
end;
-- 调用过程
call mypro5(@sum);
-- 查询变量值
select @sum;

运行结果

image-20210316105127457

repeat 循环语句

repeat语句的用法和 java中的 do…while 语句类似,都是先执行循环操作,再判断条件,区别是 repeat表达
式值为 false时才执行循环操作,直到表达式值为 true停止。

定义存储过程,使用 repeat 循环输出 1 到 10 的累加和,代码如下所示:


-- 创建过程
create procedure mypro6(out sum int)
begin
declare num int default 0;
set sum = 0;
repeat-- 循环开始
set num = num+1;
set sum = sum+num;
until num>=10
end repeat; -- 循环结束
end;
-- 调用过程
call mypro6(@sum);
-- 查询变量值
select @sum;

运行结果

image-20210316105241308

loop 循环语句

循环语句,用来重复执行某些语句。

执行过程中可使用 leave语句或 iterate 跳出循环,也可以嵌套 IF等判断语句。

leave语句效果相当于 java 中的 break,用来终止循环;

iterate语句效果相当于 java 中的 continue,用来结束本次循环操作,进入下一次循环。

定义存储过程,使用 loop 循环输出 1 到 10 的累加和,代码如下所示:


-- 创建过程
create procedure mypro7(out sum int)
begin
declare num int default 0;
set sum = 0;
loop_sum:loop-- 循环开始
set num = num+1;
set sum = sum+num;
if num>=10 then
leave loop_sum;
end if;
end loop loop_sum; -- 循环结束
end;
-- 调用过程
call mypro7(@sum);
-- 查询变量值
select @sum;

运行结果

image-20210316105416021

代码中的 loop_sum 相当于给循环贴个标签,方便多重循环时灵活操作。

存储过程的管理

存储过程的管理主要包括:显示过程、显示过程源码、删除过程。

比较简单的方式就是利用 navicat 客户端工具进行管理,鼠标点击操作即可,如下图所示:

image-20210316105545505

显示存储过程


SHOW PROCEDURE STATUS;

显示特定数据库的存储过程


SHOW PROCEDURE status where db = 'schooldb';

显示特定模式的存储过程,要求显示名称中包含“my”的存储过程


SHOW PROCEDURE status where name like '%my%';

显示存储过程“mypro1”的源码


SHOW CREATE PROCEDURE mypro1;

image-20210316105740141

删除存储过程“mypro1”


drop PROCEDURE mypro1;

总结

到此这篇关于MySQL存储过程的创建、调用与管理的文章就介绍到这了,更多相关MySQL存储过程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL存储过程的创建、调用与管理详解

本文链接: https://lsjlt.com/news/122056.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL存储过程的创建、调用与管理详解
    目录存储过程简介为什么要用存储过程?存储过程的优点存储过程的缺点 MySQL 中的存储过程创建与调用过程存储过程语法解析存储过程的参数变量变量赋值流程控制语句if 条件语句case ...
    99+
    2024-04-02
  • 详解MySQL存储过程的创建和调用
    目录前言存储过程(Stored Procedure):一、存储过程的创建和调用1、创建存储过程2、调用存储过程:call sp_name[(传参)];3、存储过程体4、为语句块贴标签...
    99+
    2024-04-02
  • MySQL存储过程的创建、调用与管理的案例分析
    这篇文章主要介绍MySQL存储过程的创建、调用与管理的案例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!存储过程简介为什么要用存储过程?MySQL5.0 版本开始支持存储过程。大多数 SQL 语句都是针对一个或多...
    99+
    2023-06-14
  • plsql存储过程怎么创建与调用
    要创建一个PL/SQL存储过程,可以按照以下步骤进行操作:1. 打开SQL开发工具,例如Oracle SQL Developer或P...
    99+
    2023-10-11
    plsql
  • MySQL存储过程创建及调用方法
    MySQL存储过程是一个sql语句,那么我们如何创建呢,MySQL存储过程创建及修改,删除操作。 1,存储过程创建 DELIMITER //CREATE PROCEDURE G...
    99+
    2024-04-02
  • mysql创建存储过程及函数详解
    目录1. 存储过程1.1. 基本语法1.2 创建一个指定执行权限的存储过程1.3 DELIMITER 的使用2. 创建函数 1. 存储过程 1.1. 基本语法 create pr...
    99+
    2024-04-02
  • mysql 存储过程的创建
    注:(1)这里需要注意的是DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL...
    99+
    2024-04-02
  • 创建MYSQL的储存过程
       创建MYAQL的存储过程         1   创建不带参数的储存过程   CREATE &nbs...
    99+
    2024-04-02
  • mysql存储过程原理与用法详解
    本文实例讲述了mysql存储过程原理与用法。分享给大家供大家参考,具体如下: 本文内容: 什么是存储过程 存储过程的创建 存储过程的使用 查看存储过程 修改存储过程 删除存储过程 首发日期...
    99+
    2022-05-31
    mysql 存储过程
  • 用Navicat创建MySQL存储过程
    使用Navicat for MySQL工具创建存储过程步骤: 点击函数右键新建: 点击下一步 最后点击完成以后弹出以下界面 在此处编写自己的sql语句,编写完成以后点击保存 最后测试一下自己的存储过程是否成功 ...
    99+
    2015-06-25
    用Navicat创建MySQL存储过程
  • 如何在MySQL中创建和调用存储过程
    在MySQL中,可以使用以下步骤来创建和调用存储过程: 创建存储过程: DELIMITER // CREATE PROCEDUR...
    99+
    2024-04-09
    MySQL
  • MySQL存储过程详解 mysql 存储过程
    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Proce...
    99+
    2024-04-02
  • 用Navicat创建MySQL存储过程(二
    1.使用Navicat for MySQL工具创建存储过程步骤: 点击查询右键新建查询 下面是查询编译器的sql语句:   DELIMITER $ DROP PROCEDURE if EXISTS selectLog...
    99+
    2021-07-18
    用Navicat创建MySQL存储过程(二
  • oracle中创建存储过程,以及存储过程中调用游标
    CREATE OR REPLACE PROCEDURE aa is   CURSOR prodCombind_cur IS SELECT * FROM proddata...
    99+
    2024-04-02
  • mysql如何创建存储过程
    小编给大家分享一下mysql如何创建存储过程,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.创建存储过程p3 (先更改结束符 ...
    99+
    2024-04-02
  • mysql存储过程怎么创建
    这篇文章主要介绍“mysql存储过程怎么创建”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql存储过程怎么创建”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • MySQL怎么创建存储过程
    要在MySQL中创建存储过程,可以按照以下步骤操作:1. 打开MySQL客户端或使用类似phpMyAdmin等工具连接到MySQL数...
    99+
    2023-08-23
    MySQL
  • mysql中怎么创建存储过程
    mysql中怎么创建存储过程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。mysql创建存储过程和函数 一个存储程序是可以被存储在服...
    99+
    2024-04-02
  • mysql 存储过程详解
    前言 在项目开发中,经常会遇到这样一种场景,当修改A表的一条数据时,需要关联修改B表、C表甚至其他更多表的数据,为什么会这样呢? 在真实的业务场景中,往往一张表的数据关联的业务是多样的,举例来说,用户在页面上完成一个订单,对服务端来说,与这...
    99+
    2023-08-17
    mysql 存储过程详解 mysql 存储过程使用 mysql 存储过程
  • MySQL存储过程概念、原理与常见用法详解
    本文实例讲述了MySQL存储过程概念、原理与常见用法。分享给大家供大家参考,具体如下: 1、存储过程的概念 在一些语言中,如pascal,有一个概念叫“过程”procedure,和“函数”function...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作