存储过程入门
1. 什么是存储过程
概念:存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集
,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
1.1 好使用它的好处
- 效率高—— 存储过程只在创造时进行编译,存储过程编译一次后,就会存到数据库,每次调用时都直接执行。
- 降低网络流量—— 存储过程编译好会放在数据库,我们在远程调用时,不会传输大量的字符串类型的sql语句。
- 复用性高—— 存储过程往往是针对一个特定的功能编写的,当再需要完成这个特定的功能时,可以再次调用该存储过程。
- 安全性高—— 可设定只有某些用户才具有对指定存储过程的使用权
2. 存储过程基本语法
2.1 创建存储过程
CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>
[过程参数[,…] ] 格式
[ IN | OUT | INOUT ] <参数名> <类型>
////////////////////////
过程名:存储过程的名称,默认在当前数据库中创建。
若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即db_name.sp_name。
过程参数:存储过程的参数列表。
其中,<参数名>为参数名,<类型>为参数的类型(可以是任何有效的 MySQL 数据类型)。
当有多个参数时,参数列表中彼此间用逗号分隔。
存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号)。
MySQL 存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用 IN、OUT 和 INOUT 三个关键字标识。
* 输入参数可以传递给一个存储过程,
* 输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。
todo 参数的取名不要与数据表的列名相同,否则尽管不会返回出错信息,但是存储过程的 SQL 语句会将参数名看作列名,从而引发不可预知的结果。
////////////////////////
过程体:存储过程的主体部分,也称为存储过程体,包含在过程调用的时候必须执行的 SQL 语句。
以关键字 BEGIN 开始,以关键字 END 结束。若存储过程体中只有一条 SQL 语句,则可以省略 BEGIN-END 标志。
create procedure 名称()
begin
.........
end
create procedure testa()
begin
select * from users;
select * from orders;
end;
mysql> delimiter $$
mysql> create procedure in_param(in p_in int)
-> begin
-> select p_in;
-> set p_in=2;
-> select P_in;
-> end$$
mysql> delimiter ;
mysql> set @p_in=1;
mysql> call in_param(@p_in);
2.2 调用存储过程
call testa();
2.3 存储过程的变量
变量:分为全局变量和局部变量
局部变量
:是在函数内作定义说明的。其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。局部变量声明一定要放在存储过程体的开始
局部变量的定义:必须先用Declare命令定以后才可以使用,declare{@变量名 数据类型}
局部变量的赋值方法:set{@变量名=表达式}或者select{@变量名=表达式}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构