存储过程是预编译好的sql语言的集合 减少编译次数,提高sql语句的重用性。但是在现阶段因为其维护困难及其他一系列的原因,有些时候并不推荐使用

创建

  1. create procedure 存储过程的名字 ( in | out | inout 参数名 参数类型 )
  2. begin
  3. select 字段名 into 输出类型的参数名 from ... 合法的sql语句;
  4. end;

其中 in out inout 表示参数的类型,in为入参,表示调用此存储过程时传进来的参数,out为出参,用于将查询结果保存在out参数上边,调用存储过程之后即可使用; inout具有in 和 out 两个的特点。有一点需要注意的是out参数只能保留单个的结果,如果一条查询语句出来多个结果,则会报错。

调用

  1. call 存储过程名字 ( 参数列表 )
  2. # 一般都是使用 set @自定义名字 = 值 来定义变量

删除

  1. # 一次只能删除一个
  2. drop procedure 存储过程名字

查看

  1. show create procedure 存储过程名字

通常存储过程很少涉及到修改,如果修改存储过程,则先删除然后再创建之。


分支语句

IF 函数

  1. if(exp,exp1,exp2)

简单的双分支函数,类似于三元运算符,可在select或其他地方调用,执行顺序为,exp为真,exp1执行,否则exp2执行。

case

  1. # 第一种 一般用于等值判断 可搭配在select语句中
  2. case exp
  3. when 值1 then 返回的值或执行的语句
  4. ...
  5. else 返回的值
  6. end [case]; # 作为语句时才有case
  7. # 第二种 一般用于区间判断
  8. case
  9. when 表达式 then 返回值或执行的语句
  10. ...
  11. else 返回值或执行的语句
  12. end [case];# 作为语句时才有case

上述两种case若作为表达式可在其他语句中使用,若作为单独的语句则只能在存储过程体函数体中使用,并且要在end后加上case 切每个分支要加上分号,当然前提是使用delimiter重新设置分隔符之后再加分好。
如果when中条件为真,则执行对应的then后边的语句并结束case;若都不满足则执行else中的语句;else可以省略,若省略else 切when中无匹配最终返回null。

示例:

根据传入的成绩显示等级,90-100 -> ‘A’,80-90 -> ‘B’,60-80 -> ‘C’,否则显示’D’

  1. delimiter $
  2. create procedure p1( in score int )
  3. begin
  4. case
  5. when score >= 90 and score <= 100 then select 'A';
  6. when score >= 80 and score <= 90 then select 'B';
  7. when score >= 60 and score <= 80 then select 'C';
  8. else select 'D';
  9. end case;
  10. end $

if 结构

可以实现多重分支,接近一般编程语言的语法

  1. if 条件 then 语句;
  2. elseif 条件 then 语句;
  3. ...
  4. [else 语句]
  5. end if;

只能用于函数体存储过程体中。
上边的例子用if分支结构可重写为:

  1. delimiter $
  2. create procedure p1( in score int )
  3. begin
  4. if score >= 90 and score <= 100 then select 'A';
  5. elseif score >= 80 and score <= 90 then select 'B';
  6. elseif score >= 60 and score <= 80 then select 'C';
  7. else select 'D';
  8. end if;
  9. end $

mysql - 存储过程及分支语句的更多相关文章

  1. MySQL存储过程动态SQL语句的生成

    用Mysql存储过程来完成动态SQL语句,使用存储过程有很好的执行效率: 现在有要求如下:根据输入的年份.国家.节假日类型查询一个节假日,我们可以使用一般的SQL语句嵌入到Java代码中,但是执行效率 ...

  2. MySQL 存储过程常用SQL语句收集

    1,select curdate() /*2016-10-08*/ 2,select date_sub(curdate(), INTERVAL 6 DAY) /*2016-10-02*/ 3,case ...

  3. MySQL存储过程 CASE语句

    MySQL存储过程  CASE语句 除了IF语句,MySQL提供了一个替代的条件语句CASE. MySQL CASE语句使代码更加可读和高效. CASE语句有两种形式:简单的搜索CASE语句. 简单C ...

  4. MySQL 存储过程 if语句

    MySQL  存储过程 if语句 MySQL IF语句允许您根据表达式的某个条件或值结果来执行一组SQL语句. 要在MySQL中形成一个表达式,可以结合文字,变量,运算符,甚至函数来组合.表达式可以返 ...

  5. mysql 存储过程:提供查询语句并返回查询执行影响的行数

    mysql 存储过程:提供查询语句并返回查询执行影响的行数DELIMITER $$ DROP PROCEDURE IF EXISTS `p_get_select_row_number`$$ CREAT ...

  6. SQL基本编程,分支语句,循环语句,存储过程,触发器

    基本编程: 定义变量 declare @变量名 数据类型 赋值 set @变量名 = 值 select @变量名 = 值 取值打印 select @变量名 print @变量名 映射到结果集 打印到消 ...

  7. MySQL存储过程中使用SELECT …INTO语句为变量赋值

    使用SELECT …INTO语句为变量赋值 在MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给变量.SELECT …INTO语句 ...

  8. 记mysql条件分支语句CASE WHEN THEN ELSE END的使用

    记一次基于mysql数据库查询时条件分支语句使用 表达式格式:CASE column WHEN 条件1 THEN 表达式1 WHEN 条件2 THEN 表达式2 .... ELSE 表达式 END [ ...

  9. mysql存储过程语法及实例

    存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程cr ...

  10. 12.Mysql存储过程和函数

    12.存储过程和函数12.1 什么是存储过程和函数存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数简化应用开发人员的工作,减少数据在数据库和应用服务器之间的传输, ...

随机推荐

  1. gdb 初次运行卡住 Starting program: [New Thread 0x1103 of process 843]

    安装完后gdb一般会有提示: ==> gdbgdb requires special privileges to access Mach ports.You will need to codes ...

  2. 关于Jetson nano (B02)如何部署Yolov8以及一些必要的知识点

    一.前言 记录一个简单的安装和部署过程,尽管笔者也是按照教程来的,但奈何参考了很多教程,虽然写的都非常好,但是却很散,因此笔者这里想把这些教程的精华提炼出来,汇总并且写在正文处.还是老规矩,笔者也在学 ...

  3. Vue.js 监听属性的使用

    示例源码: <div id = "computed_props"> 千米 : <input type = "text" v-model = & ...

  4. Kubernetes Pod状态和生命周期管理

    ​Pod​​​是​​kubernetes​​​中你可以创建和部署的最小也是最简的单位.​​Pod​​代表着集群中运行的进程. ​​Pod​​​中封装着应用的容器(有的情况下是好几个容器),存储.独立的 ...

  5. linux:网络

    网络概念 网络发展 1.1969年互联网元年 2.局域网(LAN,Local Area Network).城域网(MAN).广域网(WAN,Wide Area Network) ip地址 网络基础命令 ...

  6. py并发编程

    并发编程(并发,并行,同步,异步) 通俗理解并发编程中的相关核心概念 核心概念:进程.线程 CPU的作用 计算机的核心是CPU,它承担了所有的计算任务.它就像一座工厂,时刻在运行. CPU的核数(多核 ...

  7. ReentrantLock实现机制

    掌握Reentrantlock 具体结构 下文Reentrantlock简称RL,阅读之前强烈建议读一下AQS源码解析: https://www.cnblogs.com/seamount3/p/186 ...

  8. angularjs和ajax的结合使用 (四)

    知道的朋友了解 我不是属于讲按部就班技术的那种人.什么xx入门 ,入门到精通,入门到入土. 其实非要严格说的话已经跟angularjs 什么ajax 偏的有点远了,之所以还是叫这个名称,因为都属于we ...

  9. 小米CR6606,CR6608,CR6609 启用SSH和刷入OpenWRT 23.05.5

    上个月极低的价格得到一台CR6606和一台CR6609, 一直没时间研究, 终于趁春节假期把这两个都刷成 OpenWRT 配置说明 CPU: MT7621AT,双核880MHz 内存: NT5CC12 ...

  10. 第10章 LINQ to XML

    第10章 LINQ to XML 10.1 架构概述--DOM 和 LINQ to XML 的 DOM XML 文档可以用一棵对象树完整的表示,这称为"文档对象模型(document obj ...