• 存储过程相关命令汇总
  • 存储过程
  • 存储过程优化
  • 再说存储过程的输出参数
  • 再说WHILE 和 REPEAT循环

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
——百度百科

如图所示,在普通模式下获取数据,用户需要输入SQL命令与数据库进行交互,而存储过程是编写好的SQL命令,存储在数据库中,用户操作的时候只需要调用存储过程,而不用重新输入冗余繁杂的SQL命令。因此

  • 存储过程有什么优点?
    1.存储过程可以重复使用,大大减小开发人员的负担;
    2.对于网络上的服务器,可以大大减小网络流量,因为只需要传递存储过程的名称即可;
    3,可以防止对表的直接访问,只需要赋予用户存储过程的访问权限。

0 存储过程相关命令汇总

操作 SQL命令
创建存储过程 CREATE PROCEDURE 存储过程名(参数种类1 参数1 数据类型1,[...] BEGIN 具体的procedure(处理) END
查看数据库中的存储过程 SHOW PROCEDURE STATUS\G
查看具体的存储过程 SHOW CREATE PROCEDURE 存储过程名\G
调用(执行)存储过程 CALL 存储过程名(参数1,...);
删除存储过程 DROP PROCEDURE 存储过程名
变量声明 DECLARE 变量名 数据类型;
变量赋值 SET 变量名= ;

1 存储过程

1.1 创建存储过程 CREATE PROCEDURE

创建存储过程的命令是:


>CREATE PROCEDURE 存储过程名(参数种类1 参数1 数据类型1,[...])BEGIN具体的procedure(处理)END
  • 1)存储过程中具体的处理类容放在 BEGIN和END BEGIN 和 END 之间;
  • 2)存储过程需要制定参数,包括种类( IN,OUT,INOUT IN ,OUT,INOUT,分别代表输入参数,输出参数和即是输入也是输出的参数),参数名和数据类型。【和函数不同,函数指定输入参数即可】

eg:创建一个对表customer的姓名(nam)进行模糊检索,命名为sp_search_customer。

对于上图创建PROCEDURE的几点说明:
>DELIMITER //表示给变分隔符,默认分隔符是;,否则存储过程中含有;,MySQL监视器无法分辨。(最后将分隔符改回来)
②存储过程( BEGIN和END BEGIN 和 END 之间)的具体处理内容,主要包括条件、case,循环。

分类 SQL命令
简单条件 IF cond1 THEN
    exp1
ELSEIF cond2 THEN
    exp2
ELSE
    expelse
END IF
case CASE 表达式
    WHEN 值1 THEN …
    WHEN …THEN…
    ELSE …
END CASE
循环(后置判断) REPEAT

UNTIL …END REPEAT
循环(前置判断) WHILE … DO

END WHILE

**1.2 查看存储过程** 查看数据库中是否存在存储过程:

>SHOW PROCEDURE STATUS\G

查看存储过程的具体信息:

>SHOW CREATE PROCEDURE 存储过程名\G

eg:查看存储过程sp_search_customer

1.3 执行存储过程 CALL
调用存储过程使用CALL 存储过程名命令,具体如下:

CALL 存储过程名(参数,...)

eg:通过创建好的存储过程sp_search_cusotmer来执行存储过程:
检索‘王’姓顾客:

>CALL sp_search_customer('王%');

检索所有顾客:

>CALL sp_search_customer('');

1.4 删除存储过程 DROP PROCEDURE
删除存储过程使用命令:

DROP PROCEDURE 存储过程名;

2 存储过程优化

(1)使用if条件语句创建存储过程

可以看到,上述条件语句部分的结构大致都为:

IF... THEN
SELECT...;
ELSEIF ...THEN
SELECT...;
ELSEIF...THEN
SELECT...;
ELSE
SELECT...;

其中的语句具有较高的重复性冗余性,因此比较繁琐,如果我们用CASE替代呢?
(2)CASE命令的多重分支

使用CASE来创建多重分支:

p_dapart放到CASE之后,一个p_dapart取代了多个p_dapart,因此使用CASE代码在判断语句处显得简洁一些,如果通过定义变量的形式呢?

(3)定义本地变量

存储过程中定义的变量,被称为本地变量,对程序设计语言有所了解的知道这是一个局部变量。数据库中,
声明局部变量的命令:

>DECLARE 变量名 数据类型 [初始值...]

给变量赋值的命令:

>SET 变量名=

,在创建procedure过程中顶一个本地变量tem:

可以看到,这种方式大大地简化了代码的冗余性和重复性。

3 再说存储过程的输出参数

在创建存储过程的时候,如果制定了 OUT护着INOUT OUT护着INOUT,在调用存储过程时请在输出参数前面加上 @ @,这样结果将保存到“@变量名“中。

eg:创建一个计算阶乘的存储过程:

最终的结果将保存到“@res“之中,如上图所示。

  • 请注意,用WHILEWHILE循环创建的计算阶乘的存储过程, !5=120,!0=1 !5=120,!0=1,结果是正确的。先记住这句话,接下来看下用REPEAT创建同样的阶乘计算的存储过程。

    4 再说WHILE 和 REPEAT循环

    我们使用repeat创建一个计算阶乘的存储过程:

    接下来看下同样计算 !5和!0 !5和!0结果如何?

    可以看到!5=120的结果正确,但是!0得到的结果为0,不为1。这是什么原因呢?
    问题出在WHILE是前置判断,是先验的,先验证WHILE后面的条件是否成立,为TRUE则继续执行,若FALSE则结束循环;
    而REPEAT是后置判断,是后验的,不管三七二十一先执行语句,然后验证UNTIL后面的条件语句是否成立,不成立则结束。因此REPEAT循环执行了一次 presult=presult∗pnum,即presult=1∗0 p_result=p_result*p_num,即p_result=1*0。
    因此:

    • WHILE循环是前置判断,先验的循环
    • REPEAT循环是后置判断,后验的循环

MySQL数据库存储过程相关推荐

  1. JDBC对MySQL数据库存储过程的调用

    一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完毕特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中.用 ...

  2. 使用shell脚本调用mysql数据库存储过程,并设置定时任务

    本来是要mysql数据库中创建事件任务来,定时执行存储过程,做数据传输的...后来由于种种原因,就使用crontab来定时执行,调用存储过程. 实现这个数据传输分为两步: 第一步:编写shell脚本调 ...

  3. mysql数据库存储过程及调用方法

    mysql数据库存储过程及调用方法 mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出.6.0不仅支持大型数据库如oracle等的绝大部分功 能,如存储过程.视图.触发 ...

  4. jdbc存储过程mysql_JDBC对MySQL数据库存储过程的调用

    1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用户通过指定存储过程的名字并给出参 ...

  5. Mysql数据库存储过程基本语法讲解

    Mysql数据库存储过程基本语法讲解 一般情况下MYSQL以:结尾表示确认输入并执行语句,但在存储过程中:不是表示结束,因此可以用该命令将:号改为//表示确认输入并执行.存储过程如同一门程序设计语言, ...

  6. MySQL 案例实战--MySQL数据库 存储过程 存储函数

    MySQL数据库 存储过程 & 存储函数 前言 一.什么是存储过程 & 存储函数 二.存储过程的创建和调用 三.存储函数的创建和调用 前言 本环境是基于 Centos 7.8 系统构建 ...

  7. MySQL数据库存储过程讲解与实例

    存储过程简介 SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储 ...

  8. mysql数据库存储过程详解

    1.什么是存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数( ...

  9. MySQL数据库存储过程动态表建立(PREPARE)

    PREPARE statement_name FROM sql_text /*定义*/ EXECUTE statement_name [USING variable [,variable...]] / ...

最新文章

  1. hdu 2594 kmp
  2. 计算机笔记本电脑加固态硬盘,电脑卡的同学注意了 这些本加SSD也是渣
  3. 【转贴】Decoda Tutorial LUA调式器
  4. golang 将word转为pdf_如何将word转化为pdf格式
  5. iOS imageview图片压缩变形
  6. layuiadmin上手好难_成功男士的好搭档:松下ES-CV50电动剃须刀上手体验分享
  7. linux 中断分上下部分的原因
  8. 关系到了冰点_VIP090:关系到了冰点
  9. C++模版类List实现
  10. 达梦数据库管理工具介绍
  11. 手把手教你绘制最基础的列线图
  12. bootstrap-入门学习-流体容器与响应式布局容器
  13. FM1702 13.56MHz RF PCB天线调试经验记录
  14. 主流的工业以太网简介及比较(EPA , EtherCAT , Ethernet Powerlink , PROFINET, Ethernet/IP, SERCOS III)
  15. windows消息大全
  16. UICollectionView教程:重用、选择和排序
  17. 手把手教你用Arduino接入阿里云物联网平台,ESP8266连接阿里云物联网平台必看教程...
  18. 第一个项目的cmd代码
  19. tomcat配置监控界面
  20. 考研英语(一、二)应用文(小作文)写作模板—中公考研

热门文章

  1. php文件上传代码dsn,数据源名称无效-使用php、PDO和DSN连接到MySQL
  2. 数据的存储结构有哪些?
  3. 台式计算机风扇为什么光散热,装上RGB风扇,老机箱变的炫酷了是怎么回事
  4. 工作中常用pgsql函数
  5. 【C标准库】详解feof函数与EOF
  6. 编译内核 解决 Gentoo 在 AUSU P5B SE 板载网卡 无法上网
  7. SAP MM 事务代码VL10B对于有多个Delivery Schedule的STO item的处理
  8. 细说内网横向工具WMIHACK
  9. 网络工程师速记100条知识点(一)
  10. 2023 计算机职业规划