【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语句。

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

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

相关内容

热门资讯

不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
安卓文字转语音tts没有声音 安卓文字转语音TTS没有声音的问题在应用中比较常见,通常是由于一些设置或者代码逻辑问题导致的。本文将...
APK正在安装,但应用程序列表... 这个问题可能是由于以下原因导致的:应用程序安装的APK文件可能存在问题。设备上已经存在同名的应用程序...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
报告实验.pdfbase.tt... 这个错误通常是由于找不到字体文件或者文件路径不正确导致的。以下是一些解决方法:确认字体文件是否存在:...