目录

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 课程

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 中定义 存储过程 打包的事务 -> 打包完 可以改回 封号

mysql存储函数处理字符串分隔 mysql存储函数用法_数据库

 2 navacat 中 mysql 文件结构树

mysql存储函数处理字符串分隔 mysql存储函数用法_数据库_02

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

mysql存储函数处理字符串分隔 mysql存储函数用法_局部变量_03

 4.2 用法

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

mysql存储函数处理字符串分隔 mysql存储函数用法_存储过程_04

 

mysql存储函数处理字符串分隔 mysql存储函数用法_数据库_05

 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 -> 示例演示

mysql存储函数处理字符串分隔 mysql存储函数用法_局部变量_06

5 判读

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

mysql存储函数处理字符串分隔 mysql存储函数用法_局部变量_07

5.2 case

5.2.1 语法一 

5.2.2 语法二 -> 示例演示

mysql存储函数处理字符串分隔 mysql存储函数用法_局部变量_08

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

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

mysql存储函数处理字符串分隔 mysql存储函数用法_数据库_09

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

5.4.1 示例演示

mysql存储函数处理字符串分隔 mysql存储函数用法_存储过程_10

5.5 loop 

5.5.1 loop 简单循环 -> 死循环

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

mysql存储函数处理字符串分隔 mysql存储函数用法_sql_11

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

mysql存储函数处理字符串分隔 mysql存储函数用法_sql_12

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 示例展示 ->局部变量要声明在游标之前

mysql存储函数处理字符串分隔 mysql存储函数用法_局部变量_13

mysql存储函数处理字符串分隔 mysql存储函数用法_sql_14

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

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

7.1 语法

mysql存储函数处理字符串分隔 mysql存储函数用法_存储过程_15

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

mysql存储函数处理字符串分隔 mysql存储函数用法_存储过程_16

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 三选一

mysql存储函数处理字符串分隔 mysql存储函数用法_存储过程_17

 

mysql存储函数处理字符串分隔 mysql存储函数用法_局部变量_18

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