当前位置: 首页 > article >正文

Mysql 存储过程 / 存储函数

目录

0 课程视频

1 基本语法

1.0 作用 ->在数据库中 封装sql语句 -> 复用 -> 减少网络交互 ->可接收参数返回数据

1.1 创建

1.2 调用

1.3 查看

1.4 删除

1.5 ; 封号结束符 改成 $$ 双刀符合结束语句 -> 因为打包封号结束有冲突

1.6 在cmd 中定义 存储过程 打包的事务 -> 打包完 可以改回 封号

 2 navacat 中 mysql 文件结构树​编辑3 变量

3.1 @@指系统变量

3.1.1 全局变量 global

3.1.2 会话变量 session

3.1.3 查看系统变量

3.1.4 设置系统变量

3.1.5 设置global重启后回复初始值 -> 修改MySQL配置文件 /etc/my.cnf 

3.2 @指 用户自定义变量 ->作用域当前连接 会话

3.2.1 赋值

3.2.2 使用 -> 不用声明 -> 不存在返回null

3.3 局部变量

3.3.1 声明

3.3.2 示例 -> 作用域 begin end 范围之间

4 参数 -> 方法传参 -> 方法返回值

4.1 类型 in / out / inout

 4.2 用法

  4.2.1 定义->示例演示 -> 打包的存储过程可以传参 可以返回值

 4.2.2 调用 定义的方法 -> IN 参数  OUT 参数是定义局部变量@xxx 接收返回值

4.2.3 查看返回值 select @xxx

4.2.4 既是传入类型又是输出类型 inout -> 示例演示

5 判读

5.1 if ... then ...->示例演示 局部变量 -> 打包储存过程

5.2 case

5.2.1 语法一 

5.2.2 语法二 -> 示例演示

5.3 while 循环 ->满足条件 ->循环 

5.3.1 示例演示 -> 先储存 p7 -> 再call p7

5.4 repeat 循环 -> 满足条件 -> 退出循环

5.4.1 示例演示

5.5 loop 

5.5.1 loop 简单循环 -> 死循环

5.5.2 leave -> 退出循环 否则loop是死循环 -> 示例演示

5.5.3 iterate -> 必须再循环中 -> 跳过当前循环 执行下一次循环 ->示例演示

6 游标cursor -> 接收 打包的存储过程返回的结果集 / 表

6.1 基本语法

6.1.1 申明 declare xxx cursor for 查询语句

6.1.2 打开游标 open xxx ;

6.1.3 获取游标记录 -> 循环遍历 结果集 ->fetch xxx into 新定义的局部变量 yy ;

6.1.4 关闭游标 close xxx;

6.2 逻辑分析

6.2.1 声明游标 -> 查询 -> 记录结果集

6.2.2 建表 -> 接收数据 

6.2.3 while 循环 -> 获取数据 游标fetch-> 定义新局部变量接收值(while外面定义)

6.2.4 while中 新表 插入数据 insert into 新表 values(null , 新局部变量, 新局部变量2)

6.3 示例展示 ->局部变量要声明在游标之前

7 条件处理程序 -> 异常处理

7.1 语法

7.2 示例演示 -> 报错状态码

7.3 官方异常状态码含义查询网站

7.4 优化写法 declare exit handler for not found close 游标名 ;

8 存储函数(用的少) -> 定义方法/函数

8.0 特殊的存储过程 -> 必须有返回值 -> 只能是IN 类型 

8.1 示例演示 必须指定 deterministic / no sql / reads sql data 三选一

 8.2 调用函数 select fun1(100); fun1是函数名


0 课程视频

https://www.bilibili.com/video/BV1Kr4y1i7ru?p=102&spm_id_from=pageDriver&vd_source=ff8b7f852278821525f11666b36f180a

1 基本语法

1.0 作用 ->在数据库中 封装sql语句 -> 复用 -> 减少网络交互 ->可接收参数返回数据

1.1 创建

create procedure p1()
begin
    select count(*) from student;
end;

1.2 调用

call p1();

1.3 查看

-- 第一种 数据库有哪些 存储过程 ->打包的操作事务
select * from infromation_schema.Routines where routine_schema = '数据库名' ;
-- 第二种 储存过程 ->打包的操作事务 具体的语句
show create procedure p1;

1.4 删除

drop procedure if exists p1 ;

1.5 ; 封号结束符 改成 $$ 双刀符合结束语句 -> 因为打包封号结束有冲突

delimiter $$  // 此句无封号 ;

1.6 在cmd 中定义 存储过程 打包的事务 -> 打包完 可以改回 封号

 2 navacat 中 mysql 文件结构树3 变量

3.1 @@指系统变量

3.1.1 全局变量 global

3.1.2 会话变量 session

3.1.3 查看系统变量

show variables; // 查看所有 默认session 会话级别变量
show session variables like 'atuo%' ; // 后模糊匹配 atuo
show global variables like 'atuo%' ;

select @@autocommit ;  // 查看具体变量的值 autocommit是具体系统变量 默认session 
select @@global.autocommit ;

3.1.4 设置系统变量

set session autocommit = 0 ; // autocommit 是具体的变量 自动提交事务关闭

3.1.5 设置global重启后回复初始值 -> 修改MySQL配置文件 /etc/my.cnf 

3.2 @指 用户自定义变量 ->作用域当前连接 会话

3.2.1 赋值

-- 赋值 可以是 =  也可以是 :=
-- 推荐使用 := 因为MySQL 没有比较运算符 比较运算符用的是= 
set @myname = 'xxx' ;
set @myage := 18 ;

-- 一次赋值多个
set @myage := 'xxx',@myname = 'xxx';

-- 查询结果赋值给变量
select count(*) into @mycount from user ;

3.2.2 使用 -> 不用声明 -> 不存在返回null

select @myname , @myage ;

3.3 局部变量

3.3.1 声明

declare xxx int default 0 ;

3.3.2 示例 -> 作用域 begin end 范围之间

create procedure p2()
begin
    declare xxx int default 0; // 申明局部变量
    select count(*) from student ; // 封号是因为这里不是用cmd终端 ,用的是idea数据库终端
end;

4 参数 -> 方法传参 -> 方法返回值

4.1 类型 in / out / inout

 4.2 用法

  4.2.1 定义->示例演示 -> 打包的存储过程可以传参 可以返回值

 

 4.2.2 调用 定义的方法 -> IN 参数  OUT 参数是定义局部变量@xxx 接收返回值

call p4(68, @result); // IN 参数68  OUT 参数 定义局部变量@result

4.2.3 查看返回值 select @xxx

select @xxx ;

4.2.4 既是传入类型又是输出类型 inout -> 示例演示

5 判读

5.1 if ... then ...->示例演示 局部变量 -> 打包储存过程

5.2 case

5.2.1 语法一 

5.2.2 语法二 -> 示例演示

5.3 while 循环 ->满足条件 ->循环 

5.3.1 示例演示 -> 先储存 p7 -> 再call p7

5.4 repeat 循环 -> 满足条件 -> 退出循环

5.4.1 示例演示

5.5 loop 

5.5.1 loop 简单循环 -> 死循环

5.5.2 leave -> 退出循环 否则loop是死循环 -> 示例演示

5.5.3 iterate -> 必须再循环中 -> 跳过当前循环 执行下一次循环 ->示例演示

6 游标cursor -> 接收 打包的存储过程返回的结果集 / 表

6.1 基本语法

6.1.1 申明 declare xxx cursor for 查询语句

declare xxx cursor for 查询语句->是个表 结果集 ;
declare xxx cursor for select ... from ... where ... ;

6.1.2 打开游标 open xxx ;

 open xxx ;

6.1.3 获取游标记录 -> 循环遍历 结果集 ->fetch xxx into 新定义的局部变量 yy ;

declare yy varchar(10);
fetch xxx into 新定义的局部变量 yy ;

6.1.4 关闭游标 close xxx;

6.2 逻辑分析

6.2.1 声明游标 -> 查询 -> 记录结果集

6.2.2 建表 -> 接收数据 

6.2.3 while 循环 -> 获取数据 游标fetch-> 定义新局部变量接收值(while外面定义)

6.2.4 while中 新表 插入数据 insert into 新表 values(null , 新局部变量, 新局部变量2)

6.3 示例展示 ->局部变量要声明在游标之前

 ps: 代码两个bug 1.死循环->解决办法 条件处理程序 2.局部变量定义需要在游标定义之前

7 条件处理程序 -> 异常处理

7.1 语法

7.2 示例演示 -> 报错状态码

7.3 官方异常状态码含义查询网站

http://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html

7.4 优化写法 declare exit handler for not found close 游标名 ;

8 存储函数(用的少) -> 定义方法/函数

8.0 特殊的存储过程 -> 必须有返回值 -> 只能是IN 类型 

8.1 示例演示 必须指定 deterministic / no sql / reads sql data 三选一

 

 8.2 调用函数 select fun1(100); fun1是函数名


http://www.kler.cn/a/15450.html

相关文章:

  • C/C++中使用MYSQL
  • 【linux】如何扩展磁盘容量(VMware虚拟机)-转载
  • 三周精通FastAPI:42 手动运行服务器 - Uvicorn Gunicorn with Uvicorn
  • RTSP播放器EasyPlayer.js播放器UniApp或者内嵌其他App里面webview需要截图下载
  • 工厂模式-工厂方法模式实现
  • 大数据如何助力干部选拔的公正性
  • 博弈论又称对策论的入门及在军事博弈问题上的简单实战
  • conda命令
  • 【MySQL】数据表的增删查改
  • ChatGPT技术原理 第六章:对话生成技术
  • 【VQ-VAE代码实战】Neural Discrete Representation Learning
  • Kafka3.0.0版本——生产者数据有序与乱序
  • 在linux下搭建clash服务
  • 学生成绩管理系统 002
  • Java阶段二Day07
  • Java版企业电子招投标系统源码 Spring Cloud+Spring Boot 电子招标采购系统功能清单
  • 什么是FAQ页面?如何设计一个优秀的FAQ页面?
  • 【unity项目实战】3DRPG游戏开发06——敌人和攻击
  • 教你一招 | 亚马逊如何做好自有品牌?
  • FPGA基于XDMA实现PCIE X8视频采集HDMI输出 提供工程源码和QT上位机程序和技术支持
  • 关于储存器的笔记
  • 一维卷积与一维平均池化的时间复杂度
  • 关于《浏览器如何工作》---塔利加西尔 博客的疑惑与解答
  • Android性能优化——内存泄漏的根本原因
  • linux0.12-6-4
  • 交叉熵损失函数原理详解