MySQL存储过程

存储过程

  • 存储过程和其它编程语言的函数很像, 可以用于封装一组特定功能的SQL语句集
  • 用户通过call 存储过程的名称()来调用执行它

存储过程基本语法

drop table if exists stu;
CREATE TABLE `stu` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO `stu` VALUES (1, 'BNTang', 23);
INSERT INTO `stu` VALUES (2, '李四', 18);

定义存储过程

create procedure 存储过程名称(形参列表)
begin
    // SQL语句
    // ... ...
end;
create procedure show_stu()
begin
    select * from stu;
end;

create procedure show_stu_by_id(stuId int)
begin
    select * from stu where id = stuId;
end;

调用存储过程

call 存储过程名称(参数);
call show_stu();
call show_stu_by_id(1);

查看存储过程

  • 查看MySQL中所有存储过程
show procedure status;
  • 查看指定数据库中的存储过程
show procedure status where db='db_name';
  • 查看指定存储过程的源代码
show create procedure show_stu;

删除存储过程

drop procedure show_stu;

MySQL中定义变量

🐤全局变量

  • 定义: @变量名称;
  • 赋值: set @全局变量名称 = 值;
  • select 字段名称 into @全局变量名称 from 表名;

🐸局部变量

  • 定义: declare 变量名称 数据类型;
  • 赋值: set 局部变量名称 = 值;
  • select 字段名称 into 局部变量名称 from 表名;

全局变量

set @stuId = 2;
set @stuName = '';
select name into @stuName from stu where id= @stuId;
select @stuName from dual;

局部变量

  • 局部变量只能在存储过程和函数中定义, 所以也称之为存储过程变量
create procedure show_stu3()
begin
    declare stuId int default 1;
    declare stuName varchar(255);
    # set stuId = 2;
    select name into stuName from stu where id = stuId;
    select stuName from dual;
end;

存储过程参数

  • MySQL存储过程中的参数分为
    • in: 输入参数[默认]
    • out: 输出参数
    • inout: 输入输出参数

输入参数

  • 外界传递给我们的参数
create procedure show_stu_by_id(in stuId int)
begin
    select * from stu where id=stuId;
end;

输出参数

  • 存储过程中返回给外界的参数
  • MySQL存储过程中不能使用 return 返回值, 需要通过参数来向外返回值
create procedure show_stu_by_id(in stuId int)
begin
    set stuName = '';
    select name into stuName from stu where id=stuId;
    return stuName; # 报错
end;
create procedure show_stu_by_id2(in stuId int, out stuName varchar(255))
begin
    select name into stuName from stu where id=stuId;
end;
set @stuName = '';
call show_stu_by_id2(1, @stuName);
select @stuName from dual;

输入输出参数

  • 同时具备了输入参数和输出参数的所有功能
create procedure show_stu_by_id3(inout data int)
begin
    select age into data from stu where id=data;
end;
set @data = 1;
call show_stu_by_id3(@data);
select @data from dual;
posted @   BNTang  阅读(113)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示