原文作者:橘左京i

原文标题:针对新手的MYSQL存储过程详解

发布时间:2021-02-22 10:03:18

一位爱好技术的橘右京的哥哥橘左京

前言:什么是存储过程?存储过程就像是一个接口,可以直接去调用,不需要重复的编写。

1.1 存储过程和函数概述

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

存储过程和函数的区别在于函数必须有返回值,而存储过程没有。

1.2 创建存储过程

语句:

delimiter $

create procedure 存储过程名称()

begin

SQL语句;

end$

释义:delimiter的中文解释为‘分隔符’,表示将“$”代替“;”设置为分隔符,因为在begin后的SQL语句中需要以";“结尾,所以就要设置一个与”;"区分开的分隔符。

1.3 调用存储过程

语法:call 存储过程名称;

执行创建存储过程完成后,使用调用方法调用存储过程。

1.4 查看存储过程

查询数据库中的存储过程

select name from mysql.proc where db = 'test'

查询存储过程的状态信息

show procedure status;

1.5 变量

· DECLARE

通过DECLARE可以定义一个变量,该变量的作用范围用于BEGIN…END之间

1.5.1 声明变量示例:

案例:声明一个年龄变量并查询值

delimiter $

create procedure 存储过程名称()

begin

declare age int default 0;

select concat('num的值是',age);

end $

1.5.2 SET赋值示例:

案例:声明一个年龄变量并通过SET赋值后查询值

delimiter $

create procedure 存储过程名称()

begin

declare num int default 0;

set num = num + 10;

select concat('num的值是',num);

end $

1.5.3 select …into…赋值示例:

案例:声明一个年龄变量并通过SELECT INTO 赋值后查询值

delimiter $

create procedure 存储过程名称()

begin

declare num int;

select count(1) into num from bsx_user;

select num;

end $

1.6 IF语法判断

案例:当年龄段为12岁以下输出青年,当年龄在12-17输出青少年,18-29岁输出青年

delimiter $

create procedure test01()

begin

declare age int default 15;

declare words varchar(20) default 10;

if age <=11 then

set words = '儿童';

elseif age >= 12 and age <= 17 then

set words = '青少年';

elseif age >=18 and age <= 29 then

set words = '青年';

end if;

select concat('年龄:',age,'属于:',words);

end $

1.7 输入/输出 参数

1.7.1 案例:输入参数 传参

– 当年龄段为12岁以下输出儿童,当年龄在12-17输出青少年,18-29岁输出青年

语法:create procedure test01([in/out/inout] 参数名 参数类型)

IN: 默认为该方法 调用方传入值作为输入参数

OUT: 该参数作为输出,也就是参数可以作为返回值

OUTIN: 既可以作为输入参数,也可以作为输出参数

创建可传入参数的存储过程:

>delimiter $

create procedure test01(in age int)

begin

declare age int default 15;

declare words varchar(20) default 10;

if age <=11 then

set words = '儿童';

elseif age >= 12 and age <= 17 then

set words = '青少年';

elseif age >=18 and age <= 29 then

set words = '青年';

end if;

select concat('年龄:',age,'属于:',words);

end $

调用存储过程:

call test01(15)

1.7.2 案例:输出参数 传参

– 当年龄段为12岁以下返回儿童,当年龄在12-17返回青少年,18-29岁返回青年

根据传入的年龄大小返回对应的年龄区间名称:

delimiter $

create procedure test01(in age int,out words varchar(20))

begin

if age <=11 then

set words = '儿童';

elseif age >= 12 and age <= 17 then

set words = '青少年';

elseif age >=18 and age <= 29 then

set words = '青年';

end if;

end $

调用存储过程:

call test01(15)

查询返回的结果:

select @words ; (words是声明的变量名)

小知识:

@words:像这种前面带着@符号的变量称为会话变量,在整个会话过程起作用,类似于全局变量。

@@words:带有两个@@符号的被称为系统变量。

1.8 CASE语法结构

1.8.1 方式一(基本的CASE语法结构)

语法:

case XXX

when 1 then

赋值;

when 2 then

赋值;

else

赋值;

end case;

创建存储过程:

(输入1返回1岁 输入2返回2岁,输入其他文本输出"其他")

delimiter $

create procedure test01(age int,out words varchar(20))

begin

case age

when 1 then

set words = '一岁';

when 2 then

set words = '二岁';

else

set words = '其他';

end case;

end $;

调用存储过程:

call test01(1,@words)

查询返回的结果:

select @words;

1.8.2 方式二(带有表达式的CASE语法结构)

语法:

case

when 表达式 then

赋值;

else

赋值;

end case;

创建存储过程:

(输入0-12 返回儿童,输入13-17返回青少年,输入18-29返回青年,输入其他值返回“老年”)

delimiter $

create procedure test01(age int)

begin

declare words varchar(20);

case

when age >=0 and age <= 12 then

set words = '儿童';

when age >=13 and age <= 17 then

set words = '青少年';

when age >=18 and age <= 29 then

set words = '青年';

else

set words = '老年';

end case;

select words;

end $;

调用存储过程查询返回的结果:

call test01(15);

1.9 While循环

特征:满足条件继续循环

语法:

while a<=10 do

end while;

创建存储过程:

(输入一个数,累加超过这个数字时候停止循环并显示数字)

delimiter $

create procedure test01(n int)

begin

declare total int default 0;

declare num int default 1;

while total <= n do

set total = total + num;

set num = num + 1;

end while;

select total;

end $

调用存储过程:

call test01(2)

1.10 repeat循环

特征:满足条件退出循环

语法:

repeat

循环语句…

until 条件语句

end repeat;

创建存储过程:

(计算 1+到n的值)

delimiter $

create procedure test01(n int)

BEGIN

declare num int default 0;

repeat

set num = num + n;

set n = n-1;

until n = 0

end repeat;

select num;

end $

调用存储过程:

call test01(5)

1.11 loop循环

特征:满足条件退出循环

语法:

XX:loop (XX代表别名)

循环语句…

if XX<=0 then (因为loop不带有停止循环的判断语句 所以用IF)

leave c;

end if;

end loop c;

创建存储过程:

(计算 1+到n的值)

delimiter $

create procedure test01(n int)

BEGIN

declare num int default 0;

c:loop

set num = num + n;

set n = n - 1;

if n <= 0 then

leave c;

end if;

end loop c;

select num;

end $

调用存储过程:

call test01(5)

觉得有帮助可以收藏文章

Post Views:

10

mysql存储过程按区间_针对新手的MYSQL存储过程详解_CSDN_ChenF的博客-CSDN博客相关推荐

  1. mysql存储过程default的意思,针对新手的MYSQL存储过程详解

    一位爱好技术的橘右京的哥哥橘左京 前言:什么是存储过程?存储过程就像是一个接口,可以直接去调用,不需要重复的编写. 1.1 存储过程和函数概述存储过程和函数是事先经过编译并存储在数据库的一段SQL语句 ...

  2. mysql 安装 知乎_知乎问答3-MySQL安装详解

    MySQL安装详解 步骤1:选择安装类型 有3种安装类型:Typical(典型安装).Complete(完全安装)和Custom(定制安装). Typical(典型安装)安装只安装MySQL服务器.m ...

  3. mysql的jdbc版本_【jdbc】Mysql 8版本jdbc设置

    本篇文章为自用,侵删. 8版本的MySQL在一些指令上发生了变化,设置起来比较麻烦,不过不用着急,耐心的做好以下步骤就能成功. 一般要jdbc连接需要以下步骤: 一.基本操作 1.下载mysql8及以 ...

  4. 怎么禁止/开启Ubuntu自动更新升级_豆豆技术派的博客-CSDN博客_ubuntu 自动更新

    怎么禁止/开启Ubuntu自动更新升级_豆豆技术派的博客-CSDN博客_ubuntu 自动更新

  5. 当了十年 IT 程序员,我转型做自动驾驶开发的这五年”_《新程序员》编辑部的博客-CSDN博客

    "当了十年 IT 程序员,我转型做自动驾驶开发的这五年"_<新程序员>编辑部的博客-CSDN博客

  6. ubuntu 安装Pangolin 过程_余辉亮的学习笔记的博客-CSDN博客_pangolin安装

    ubuntu 安装Pangolin 过程_余辉亮的学习笔记的博客-CSDN博客_pangolin安装

  7. ubuntu下解决“无法获得锁 ”的方法_cppmylove的博客-CSDN博客_无法获得锁

    ubuntu下解决"无法获得锁 "的方法_cppmylove的博客-CSDN博客_无法获得锁 E: 无法获得锁 /var/lib/dpkg/lock-frontend - open ...

  8. ubuntu18.04在终端安装pip3时404 Not Found [IP: 91.189.91.24 80]_木绿的博客-CSDN博客

    ubuntu18.04在终端安装pip3时404 Not Found [IP: 91.189.91.24 80]_木绿的博客-CSDN博客 解决办法如下 亲测可用 sudo apt-get updat ...

  9. 无人驾驶运动学模型——线性时变模型预测控制的思路推演过程_百叶书的博客-CSDN博客_线性时变模型预测控制 转

    无人驾驶运动学模型--线性时变模型预测控制的思路推演过程_百叶书的博客-CSDN博客_线性时变模型预测控制

最新文章

  1. element-ui 2.4.3 如何实现对form部分字段验证的解决方法?
  2. VC中实现弹出CEdit的气泡提示框
  3. 通讯录的初步了解与使用
  4. java地址自动拆分_java – Hibernate:每个月自动拆分表
  5. 华为nova7se能云闪付吗_华为迎来转机!联发科“顶替”麒麟芯片,已售罄手机将重获新生...
  6. linux系统启动报错:[contains a file system with errors, check forced]的解决方法参考【ZT】
  7. 学习笔记(五)——数据适配器、数据表、数据网格视图控件的综合应用。
  8. Vue的v-if与v-show的区别
  9. Win10彻底关闭恢复功能、省流量终极设置
  10. 最近两个星期,机器经常卡死,难道是内存用光了?
  11. [每天一个知识点]25-职业生涯-核桃皮是当水果吃好还是当蔬菜吃好?
  12. R分层抽样(Stratified Sampling)
  13. 全年精彩内容大盘点 | 虎年贺岁特辑
  14. Android 手机重启相关内容
  15. 魅族便签,能否成为国内便签应用的No.1?
  16. Perl之Spreadsheet::WriteExcel安装
  17. 【LeNet-MNIST】
  18. https://www.52pojie.cn/thread-688820-1-1.html
  19. 安装libtiff3.6
  20. Navicat Data Modeler(ndm2)数据模型逆向生成表

热门文章

  1. P4318-莫比乌斯函数+容斥
  2. java中json数据_Java中json的使用 解析json数据
  3. 新年找工作的注意啦:一般通用面试内容
  4. 怎么能看出来一个人善不善良?
  5. 美团招聘视觉算法实习生
  6. STM32与RC522简单公交卡系统的设计
  7. 中文正则字符大全集2
  8. IoT黑板报0210:Google 发布 Android Things 开发者第二预览版
  9. [bzoj4398]福慧双修
  10. QPS\TPS指的是什么?怎样测试一个接口得QPS