当前位置: 首页> 科技> IT业 > MySQL 存储过程

MySQL 存储过程

时间:2025/7/10 22:18:50来源:https://blog.csdn.net/qq_18296979/article/details/139246646 浏览次数:0次

存储过程(Stored procedure)

MySQL 存储过程

  • 存储过程(Stored procedure)
    • 简介
    • 基本语法
      • 系统变量
      • 局部变量
      • if判断
      • 参数(IN/OUT/INOUT)
      • 循环 while
    • 练习
      • 1、查询score表的得分信息按降序排序,要求显示序号
      • 2、编写一个存储过程,通过该存储过程在teacher表中添加100条数据,仅添加ID从10开始的奇数数据


简介

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

特点

  • 封装、复用
  • 可以接收参数,也可以返回数据
  • 减少网络交互,效率提升

基本语法

创建

CREATE PROCEDURE 存储过程名称([参数列表])
BEGIN-- SQL语句
END;

调用

CALL 存储过程名称([参数]);

查询整个存储过程的定义

SHOW CREATE PROCEDURE 存储过程名称;

删除

DROP PROCEDURE [IF EXISTS] 存储过程名称;

变量赋值:

SET @p_in=1  

系统变量

1、介绍

系统变量时MySQL服务器提供,不是用户定义的,属于服务器层面。

可分为:全局变量(GLOBAL)、会话变量(SESSION)。

全局变量在所有会话中有效,会话变量仅在当前会话中有效。

2、语法:

查看系统变量

-- 查看所有系统变量
SHOW [SESSION | GLOBAL] VARIABLES;-- 可以通过like模糊匹配方式查找变量
SHOW [SESSION | GLOBAL] VARIABLES LIKE '...';-- 查看指定变量的值
SELECT @@[SESSION. | GLOBAL.] 系统变量名;

设置系统变量

SET [SESSION | GLOBAL] 系统变量名 =;
SET @@[SESSION. | GLOBAL.]系统变量名 =;

局部变量

1、介绍

局部变量是根据需要定义的在局部生效的变量,访问之前,需要DECLARE声明。可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN … END块。

2、语法

声明

DECLARE 变量名 变量类型 [DEFAULT ...];

变量类型就是数据库字段类型:INT、BIGINT、CHAR、VARCAHR、DATE、TIME等。

赋值

SET 变量名 =;
SET 变量名 :=;
SELECT 字段名 INTO 变量名 FROM 表名 ...;

if判断

语法:

IF 条件1 THEN...
ELSEIF 条件2 THEN    -- 可选...
ELSE                -- 可选...
END IF;

参数(IN/OUT/INOUT)

参数

类型含义备注
IN该类参数作为输入,也就是需要调用时传入值默认
OUT该类参数作为输出,也就是该参数可以作为返回值
INOUT既可以作为输入参数,也可以作为输出参数

语法:

CREATE PROCEDURE 存储过程名称([IN/OUT/INOUT 参数名 参数类型])
BEGIN-- SQL语句
END;

根据传入参数score,判断当前分数对应的分数等级,并返回。

score >= 85分,等级为优秀;
score >= 60分,且score < 85分,等级为及格;
score < 60分,等级为不及格。

-- 创建存储过程
create procedure grade_core_2(in score int, out grade varchar(10))
beginif score >= 85 thenset grade := '优秀';elseif score >= 60 thenset grade := '及格';elseset grade := '不及格';end if;select grade;
end;-- 调用 
call grade_core_2(18, @result);
select @result; 

循环 while

语法

# 先判定条件,如果条件为true,则执行逻辑,否则,不执行逻辑
WHILE 条件 DOSQL逻辑...
END WHILE;

练习

1、查询score表的得分信息按降序排序,要求显示序号

SET @n=0;
SELECT s_id,s_score,@n:=@n+1 rank FROM `score` ORDER BY s_score DESC;

在这里插入图片描述

2、编写一个存储过程,通过该存储过程在teacher表中添加100条数据,仅添加ID从10开始的奇数数据

CREATE PROCEDURE proct ( IN num INT ) 
BEGINDECLAREi INT;SET i = 10;WHILEi < num DOSET i = i + 1;IFi % 2 = 1 THENINSERT INTO teacher (t_id, t_name)VALUES(i, CONCAT( 'xcz', i));END IF;END WHILE;
END;
call proct(210);

在这里插入图片描述


在这里插入图片描述

关键字:MySQL 存储过程

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: