【MySQL 第十一天 创建和存储|复合结构的存储|存储过程和函数的区别】
创始人
2024-04-02 10:15:01
0

【MySQL 第十一天 创建和存储|复合结构的存储|存储过程和函数的区别】

  • 【1】mysql储存过程及语法结构
    • 【1.1】mysql过程体
  • 【2】mysql创建和使用存储过程
    • 【2.1】mysql创建无参的存储过程
    • 【2.2】mysql创建有参的输入输出存储过程
  • 【3】mysql删除存储过程
  • 【4】mysql创建复合结构的存储过程
    • 【4.1】mysql if语句 存储过程
    • 【4.2】mysql case语句 存储过程
    • 【4.3】mysql floor和rand函数
  • 【5】mysql 存储过程与函数的区别

在这里插入图片描述


开启前线学习模式,生命不止,学习不止


【1】mysql储存过程及语法结构

在这里插入图片描述

create procedure proc_name([proc_parameter])
[characteristics ...]routine_bodyprocedure :程序;步骤;
characteristics :特征;特性;特质;
routine_body:常规体[IN]:输入参数
[OUT]:输出参数
[INOUT:输入输出参数]
type:数据类型
默认是IN输入参数类型

在这里插入图片描述


【1.1】mysql过程体

在这里插入图片描述
在这里插入图片描述

==调用存储过程使用 call ==

-- 创建存储过程
create procedure selectproc()
select book_id,book_name,price,store from bookinfo;-- 调用存储过程
call selectproc();

在这里插入图片描述

参考表
在这里插入图片描述

存储过程的完整写法举例

-- 创建存储过程
delimiter //
create procedure selectproc()
begin
select book_id,book_name,price,store from bookinfo;
end//
delimiter ; -- 注意这里的分号前必须有空格-- 调用存储过程
call selectproc();

在这里插入图片描述


【2】mysql创建和使用存储过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


【2.1】mysql创建无参的存储过程

在这里插入图片描述

-- 创建存储过程举例 无参数  存储的数据来自两张表 使用内连接
delimiter //
create procedure pro1()
begin
select bookinfo.book_id,bookinfo.book_name,bookparent.book_id from bookinfo 
INNER join bookparent 
on bookinfo.book_copy_id = bookparent.book_id;
end//
delimiter ;-- 调用查看存储过程
call pro1;

在这里插入图片描述


【2.2】mysql创建有参的输入输出存储过程

在这里插入图片描述
读者信息表为例
在这里插入图片描述

-- 设计一个存储过程,删除一个读者,并输出剩余读者的个数。
delimiter //
create procedure pro2(in cid char(18), out num int)
begin
delete from readerinfo WHERE card_id = cid;
select count(card_id) into num from readerinfo;-- 获取剩余的读者数
end//
delimiter ;-- 查看读者信息表
select *from readerinfo;-- 调用存储过程 这个用户52214685259788被删除
call pro2('52214685259788',@num); -- @num获取里面的num值-- 查看剩余读者
select @num; -- 去@出这个值

在这里插入图片描述


在这里插入图片描述

-- 设计一个存储过程,实现交换两个数的处理。
delimiter //
create procedure pro3(inout a int ,inout b int)
begin 
declare t int default 0;
set t = a;
set a = b;
set b = t;
end//
delimiter ;-- 设置变量值和传递参数
set @a = 100,@b = 200;
call pro3(@a,@b);-- 查看
select @a,@b;

在这里插入图片描述


【3】mysql删除存储过程

在这里插入图片描述

-- 删除存储过程 完整写法
drop procedure if exists pro1;-- 尝试同时删除多个
drop procedure  pro2,pro3; -- 删除失败 只能一一删除

在这里插入图片描述


【4】mysql创建复合结构的存储过程

在这里插入图片描述

【4.1】mysql if语句 存储过程

-- 使用if语句 比较两个数的大小的存储过程
drop PROCEDURE if exists pro4;delimiter //
create PROCEDURE pro4(in num1 int ,in num2 int ,out result varchar(30))
begin
if num1 = num2 then set result = 'num1等于num2';
elseif num1>num2 then set result = 'num1大于num2';
else set result = 'num1小于num2';
end if ;
end//
delimiter ;-- 查看和调用
call pro4(5,5,@result);
select @result;

在这里插入图片描述

【4.2】mysql case语句 存储过程

-- 使用case语句 比较两个数的大小的存储过程
drop PROCEDURE if exists pro4;delimiter //
create PROCEDURE pro4(in num1 int ,in num2 int ,out result varchar(30))
begin
case 
when num1 = num2 then set result = '等于';
when num1 > num2 then set result = '大于';
else set result = '小于';
end case;
end//
delimiter ;-- 查看和调用
call pro4(5,5,@result);
select @result;

在这里插入图片描述


在这里插入图片描述

【4.3】mysql floor和rand函数

-- 获取随机数
select rand(); -- 十六位小数
select rand()*5; -- 0-5以内的十六位小数-- floor获取指定数以内的整数 比如 5以内 0-4
select floor(rand()*5);

在这里插入图片描述

== 通过存储过程插入100条数据==

-- 通过存储过程向表中插入100条数据
delimiter //
create procedure pro12()
begin 
declare n int default 8;
while n<=107 doinsert into book_bak values(n,concat('图书名称',n),floor(rand()*n));set n = n+1;
end while;
end//
delimiter ;-- 调用
call pro12();select *from book_bak;

在这里插入图片描述


【5】mysql 存储过程与函数的区别

在这里插入图片描述
在这里插入图片描述

存储过程与函数的区别
参数的不同:
·存储过程:存储过程的参数类型有三种,IN、OUT、INOUT。
存储函数:参数类型只有一种,类似于IN参数。调用函数时需要按照参数的类型指定值即可。

在这里插入图片描述

存储过程与函数的区别
语法结构上的不同:·
存储过程:存储过程声明时不需要指定返回类型。
·存储函数:函数声明时需要指定返回类型,且在函数体中必须包含一个有效的RETURN语句。

在这里插入图片描述
在这里插入图片描述

== 本节结束,还有三章订阅不迷路==
在这里插入图片描述

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...