MySQL存储过程、创建、调用、查看、删除、存储过程与函数的额区别、缺陷等、存储过程写分页等

发布时间:2024年01月01日

1、存储过程的定义

存储过程:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后,再次调用不需要重复编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

用一张图理解就是:

在这里插入图片描述

2、存储过程使用的意义
  1. 业务流陈复杂:业务复杂时,SQL语句相互依赖,顺序执行
  2. 频繁访问数据库:每条SQL语句都需要单独连接和访问数据库
  3. 先编译后执行:SQL语句的执行需要先编译
3、存储过程的创建
delimiter $$
CREATE PROCEDURE (
[ [IN |OUT |INOUT ] 参数名 数据类型…])
BEGIN
	DECLARE 变量 变量类型
END $$
delimiter ;

说明:
	‘[]’内容不是必须的部分
	in:表示入参
	out:表示出参
	inout:表示既入参又是返回值
	delimiter:在mysql中‘;’的作用是结束一个SQL语句,但是在存储过程中一组sql语句共同执行,如果使用‘;’那么后面的sql语句将无法同批次执行,因此先将结束符号设置为$$,而后又恢复为‘;’;
	
存储过程的创建
eg:
delimiter $$
create procedure proc_demo1()
begin 
	select * from student;
end $$
delimiter ;

-- 带参的存储过程
delimiter $$
create procedure proc_demo2(
	in x int,   -- in 只入参
	out y int,  -- out 只出参
	inout z int  -- inout 出入参
)
begin 
	set x = x+10;
	set y = y+100;
	set z = z+1000;
end $$
delimiter ;
4、存储过程的调用
call 存储过程名(参数名)

eg:
	call proc_demo1()
	
	
-- 环境变量 局部环境变量 @xx  全局环境变量@@x 
set @a = 1;  
set @b = 2;
set @c = 3;
select @a,@b,@c
call proc_demo2(@a,@b,@c)
select @a,@b,@c
5、存储过程的查看
select * from information_schema.ROUTINES where routine_schema='库名'
6、存储过程的删除
drop procedure 存储过程名
7、存储及过程与函数的区别
  1. 语法:存储过程procedure,函数function
  2. 执行:存储过程可以独立执行,函数必须依赖表达式的调用
  3. 返回值:存储过程可以定义多个返回结果,函数只有一个返回结果
  4. 功能:函数不易做复杂的业务逻辑,但是存储过程可以
8、存储过程的缺陷
  1. 维护性:存储过程的维护成本高,修改调试较为麻烦
  2. 移植性:大多数关系型数据库的存储过程存在席位差异
  3. 协作性:没有相关的版本控制或者IED,团队中对于存储过程的使用大多是依赖文档
9、存储过程写分页
delimiter $$
create procedure proc_stuPage2(
	in curpage int,
	in sizepage int,
	out countsum int,
	out pagesum int
)
begin 
	declare weizhi int;
	set weizhi = (curpage-1)*sizepage;
	select count(*) from student into countsum;
	set pagesum = ceiling( countsum / sizepage );
	select * from student limit weizhi, sizepage;
end $$
delimiter ;


调用:
set @a = 2;
set @b = 3;
set @c = 0;
set @d = 0;
call proc_stuPage2(@a,@b,@c,@d)

select @a,@b,@c,@d
文章来源:https://blog.csdn.net/LIJINGPO/article/details/135315823
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。