Mysql存储过程(学习自用)

目录

一、什么是存储过程?

二、存储过程有什么用?

三、存储过程的一些操作

3.1创建存储过程

3.2调用存储过程

3.3删除存储过程

3.4存储过程的一些语法

3.4.1传入传出参数

3.4.2定义变量

3.4.3赋值变量

3.4.4条件判断

3.4.5循环语句

四、抛出异常

五、游标的使用

5.1含义

5.2声明游标

5.3打开游标

5.4获取数据

5.5关闭游标


一、什么是存储过程?

存储过程本质上就是执行一组SQL语句来完成某些任务。

二、存储过程有什么用?

1)提高性能。

2)提高代码复用性。

3)简化复杂操作。

4)便于维护和管理。

5)减少数据库压力。

三、存储过程的一些操作

3.1创建存储过程

sql 复制代码
create procedure pro_name(
in 输入参数1,2,3..,
out 输出参数1,2,3...,
inout 输入输出参数1,2,3...)
begin
  SQL代码块
end

3.2调用存储过程

sql 复制代码
call pro_name(参数);

3.3删除存储过程

sql 复制代码
drop procedure pro_name;

3.4存储过程的一些语法

3.4.1传入传出参数

in是存储过程的输入参数,out数存储过程的输出参数,inout既可作为输入参数,又可作为输出参数。

3.4.2定义变量

sql 复制代码
declare 变量名 类型 default 默认值;

declare sum int default 0;

default 不需要可以去掉。

3.4.3赋值变量

sql 复制代码
-- 1)
set sum=0;

-- 2)
select 0 into sum;

3.4.4条件判断

sql 复制代码
if 判断条件1
   then
elseif 判断条件2
   then
elseif 判断条件3
   then
else
end if;

3.4.5循环语句

sql 复制代码
-- 1)while
while 判断条件
  do
  循环语句
end while;

-- 2)repeat
repeat
  循环语句
  until 条件     -- 条件成立则结束循环(注意until条件后面没有分号)
end repeat;

-- 3)loop
myloop:loop
  循环语句
  if 条件
     leave myloop;    -- 条件成立时执行leave语句跳出loop循环语句,若是iterate,则相当于continue作用
  end if;  
end loop;

四、抛出异常

sql 复制代码
create procedure pro_insert_student(
in id varchar(10),
in ssname varchar(20),
in sex varchar(5)
)
begin 
  declare easy_count int;
  declare exit handler for SQLEXCEPTION
	BEGIN
	  signal SQLSTATE '45002' set message_text='报异常了';
	END;
  #做检查,没有通过就抛出异常
  #1、id是否已经重复
		select count(*) into easy_count from student where sid=id;
		if easy_count>0 then 
		   signal SQLSTATE '45000' set message_text='id值重复';
	  end if;
		if sex !='男' and sex !='女' then
		   signal SQLSTATE '45001' set message_text='性别不合法';
	  end if;
	#2、sex是否是男或女
	  insert into student(sid,sname,ssex) values(id,ssname,sex);
end 
drop procedure pro_insert_student;

call pro_insert_student(20,'六百六十六','女');

五、游标的使用

5.1含义

游标(cursor)可以理解为一个指向结果集中某条记录的指针,允许程序逐一访问结果集中的每条记录,并对其进行逐行操作和处理。

5.2声明游标

sql 复制代码
declare 游标名称 cursor for 查询语句;

5.3打开游标

sql 复制代码
open 游标名称;

5.4获取数据

sql 复制代码
fetch 游标名称 into 变量[,变量,变量......]

5.5关闭游标

sql 复制代码
close 游标名称;

本文借鉴了MySQL 存储过程(超详细)

学习更详细的知识可以看一下。

相关推荐
AI进化营-智能译站3 分钟前
ROS2 C++开发系列11-VS Code一键生成Doxygen注释|让ROS2节点文档自动跟上代码迭代
java·数据库·c++·ai
HERR_QQ7 分钟前
端到端课程自用 5 规划 基于Difussion 的端到端planner AI 笔记
人工智能·笔记·学习·自动驾驶
村头的猫10 分钟前
JWT 令牌的工作原理,结构和签名验证
前端·数据库·经验分享·微服务
许彰午10 分钟前
CacheSQL(四):CacheSQLClient——用一张路由表实现水平扩展
java·数据库·缓存·系统架构·政务
Lyyaoo.11 分钟前
缓存穿透/雪崩/击穿
数据库·缓存·oracle
许彰午14 分钟前
CacheSQL(三):双 HTTP 引擎与 SQL 查询——接口抽象的价值
java·数据库·sql·缓存
lKWO OMET15 分钟前
mysql之字符串函数
android·数据库·mysql
lilihuigz8 小时前
Tutor LMS 4.0 Beta版全新上线:以学习者为中心的移动优先学习体验
学习·在线教育·lms
Flying pigs~~9 小时前
RAG智慧问答项目
数据库·人工智能·缓存·微调·知识库·rag
misL NITL10 小时前
mysql之如何获知版本
数据库·mysql