MySQL存储过程和函数

本文深入探讨了SQL存储过程的概念、优点和缺点,包括其封装复杂逻辑、提高效率和数据验证的能力。同时,介绍了存储过程的创建、调用语法以及变量声明。还讲解了if、case等控制结构和while、repeat循环语句在存储过程中的应用,以及如何定义和使用函数。此外,文中提到了concat()和concat_ws()函数在字符串操作中的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.定义:具有名字的一段SQL代码,用来完成一个特定的功能(输入、输出、逻辑关系)

2.优点:

  1. 存储过程可以封装,隐藏了复杂的逻辑
  2. 存储过程可以回传数据,并可以接受参数
  3. 先编译后运行,效率高
  4. 可以用在数据检验、前置实行业务逻辑

3.缺点:

  1. 定制化于特定的数据库,移植性不友好
  2. 存储过程调试比较困难

4.语法

delimiter $$
create procedure [if not exists] 存储过程名([参数列表])
begin 
    存储过程代码
end$$
delimiter ;

-- 调用存储过程
call 存储过程名([参数列表])

delimiter:重新定义存储过程的结束符号,MySQL的结束符默认是“;”。

存储过程名的命名规范:同数据库命名规范,推荐使用有实际意义的单词。

参数列表:三种参数类型(in、out、inout)

  • in:允许使用该类型的参数向存储过程内部传入数据
  • out:允许使用该类型的参数向存储过程外部传出数据
  • inout:既可以传入数据也可以传出数据

5.用法

concat(str1,st2,str3,...):将str1,str2连接成一个字符串

concat_ws(sep,str1,st2,str3,...):使用分隔符sep将str1,str2连接成一个字符串

修改为 select concat_ws() into msg from....

定义变量

存储过程内部变量

declare 变量名 数据类型 [default 默认值];

declare要写在存储过程的其他语句的前面;使用declare定义的变量的时候,不需要使用@变量名模式,直接用。

用户变量

客户端使用的变量,也称为外部变量 

set @变量名=值;

6.结构语句

6.1分支结构

6.1.1if语句

if 条件 then
    执行代码
[else if 条件 then
    执行代码
else
    执行代码
]
end if;

6.1.2case语句

set @var=1;
case @var
    when 1 then
        执行代码;
    when 2 then
        执行代码;
    else
        执行代码;
    end case;

6.2循环结构

[label:]while 条件表达式  do
    语句块;
end while [label];

label:标签,用于标识循环的入口,如果中途需要跳出循环,就必然会用到这个标签。

[label:]repeat
    语句块;
until 条件表达式 end repeat label;

关键字:

iterate迭代:重新开始执行循环语句;当执行到该关键字的时候,循环后面的语句就不执行了,而是从头再来

leave离开:直接离开循环,循环结束。


函数

一段用于实现一个独立功能的SQL代码,具有返回数据结果的能力。

create function 函数名([参数列表]) returns 返回类型
begin
    语句块;
    return 结果;
end


-- 调用方式
函数名([参数列表])   --直接调用
set @变量名=函数名([参数列表]) --将函数的返回结果赋值给变量

函数只能返回一个参数,要返回多个参数使用存储过程

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值