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

【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储存过程及语法结构

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

create procedure proc_name([proc_parameter])
[characteristics ...]routine_body

procedure :程序;步骤;
characteristics :特征;特性;特质;
routine_body:常规体

[IN]:输入参数
[OUT]:输出参数
[INOUT:输入输出参数]
type:数据类型
默认是IN输入参数类型

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


【1.1】mysql过程体

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

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

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

-- 调用存储过程
call selectproc();

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

参考表
【MySQL 第十一天 创建和存储|复合结构的存储|存储过程和函数的区别】_第6张图片

存储过程的完整写法举例

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

-- 调用存储过程
call selectproc();

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


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

【MySQL 第十一天 创建和存储|复合结构的存储|存储过程和函数的区别】_第8张图片
【MySQL 第十一天 创建和存储|复合结构的存储|存储过程和函数的区别】_第9张图片
【MySQL 第十一天 创建和存储|复合结构的存储|存储过程和函数的区别】_第10张图片


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

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

-- 创建存储过程举例 无参数  存储的数据来自两张表 使用内连接
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;

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


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

【MySQL 第十一天 创建和存储|复合结构的存储|存储过程和函数的区别】_第13张图片
读者信息表为例
【MySQL 第十一天 创建和存储|复合结构的存储|存储过程和函数的区别】_第14张图片

-- 设计一个存储过程,删除一个读者,并输出剩余读者的个数。
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; -- 去@出这个值

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


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

-- 设计一个存储过程,实现交换两个数的处理。
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;

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


【3】mysql删除存储过程

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

-- 删除存储过程 完整写法
drop procedure if exists pro1;

-- 尝试同时删除多个
drop procedure  pro2,pro3; -- 删除失败 只能一一删除

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


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

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

【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;

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

【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;

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


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

【4.3】mysql floor和rand函数

-- 获取随机数
select rand(); -- 十六位小数
select rand()*5; -- 0-5以内的十六位小数

-- floor获取指定数以内的整数 比如 5以内 0-4
select floor(rand()*5);

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

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

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

-- 调用
call pro12();

select *from book_bak;

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


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

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

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

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

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

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

== 本节结束,还有三章订阅不迷路==
【MySQL 第十一天 创建和存储|复合结构的存储|存储过程和函数的区别】_第31张图片

你可能感兴趣的:(MySQL,mysql,数据库,sql,mysql存储过程,嵌入式数据库)