【MySQL】存储过程

【MySQL】存储过程,第1张

概述概念存储过程和函数可以理解为一段sql的集合,他们被事先编译好并且存储在数据库中。在pascal语言中,是有过程和函数的区别的,过程可以理解为没有返回值得函数。不过在C语言总,则没有过程这个概念,统一为函数创建存储过程create procedure 存储过程名(参数列表)begin存储过程体endcreate procedure user_data()beginselec... 概念

存储过程和函数可以理解为一段sql的集合,他们被事先编译好并且存储在数据库中。在pascal语言中,是有过程和函数的区别的,过程可以理解为没有返回值得函数。不过在C语言总,则没有过程这个概念,统一为函数

创建存储过程

create procedure 存储过程名(参数列表)
begin
存储过程体
end

create procedure user_data()
begin
select * from table_a;
end;

调用存储过程

call user_data();

执行结果:
这就是一个简单的存储过程

参数类型

在上边创建存储过程中,我们知道在user_data()里边可以携带参数的

解释参数

1.in 表示用来输入
2.out 表示用来输出
3.inout 可以用来输入也可以用来输出

携带参数的存储过程

先使用命令删除我们之前创建的user_data的存储过程

drop procedure user_data;

创建在带参数的存储过程

create procedure user_data(in ID int)
begin
select * from table_a where ID = ID;
end

执行带参数的存储过程

还可以直接输出我们需要字段

设置变量

declare kaka varchar(225) default ‘我是咔咔’;

存储过程中的常用数据类型

1.数值类型
int float double decimal(用于钱上)
2.日期类型
timestamp data year
3.字符串
char varchar text

游标的使用

游标也有的资料上称为光标。
我们可以在存储过程中使用游标来对结果集进行循环的处理。
游标的使用步骤基本分为:声明、打开、取值、关闭。
语法:

DECLARE test_cursor CURSOR FOR 结果集; //声明游标
OPEN test_cursor; //打开游标
CLOSE test_cursor; //关闭游标
DECLARE CONTINUE HANDLER FOR NOT FOUND //结果集查询不到数据自动跳出
总结:

游标的声明的语法: declare 游标名称 cursor for 查询语句;
打开光标的语法: open 游标名称;
获取游标数据: fetch 游标名称 into 变量名 1 [,变量名 2 …]
关闭游标的语法: close 游标名称;
游标的基本使用须知:对某个表按照循环的处理,判断循环结束 的条件是捕获 not found 的条件,当 fetch 光标找不到下一条记录的 时候,就会关闭光标然后退出过程。
可能有过 Pascal 编程经验的朋友们都会知道,声明的顺序也是很 重要的,在 sql 中,我们使用 declare 定义的顺序是:变量、条件、 游标、应用程序
*** 作 查询出来的数据会放置于临时表中,然后再通过游标去读取数据。

案例

create procedure user_data(out count int)begin	declare user_ID int;	-- 游标标识	declare blag int default 1;	-- 游标  declare user_cursor cursor for select data.user_ID from mac_user as data;	-- 处理not fount的异常	declare continue handler for not found set blag = 0;  set count = 0;  -- 打开游标	open user_cursor;  -- 执行循环  read_loop:loop		-- 获取游标中的值    fetch user_cursor into user_ID;		-- 检测循环是否		if blag = 0 then			-- 跳出循环			leave read_loop;		end if;-- 		if user_ID = 1 then			set count = count + user_ID;-- 		end if;	end loop read_loop;	-- 关闭游标	close user_cursor; 	select count;end;call user_data(@count);  
命令查看存储过程

show procedure status;
show create procedure kaka;

存储过程的优点

1.第一点优势就是执行速度快,因为我们的每个SQL语句执行都需要经过编译,然后在运行,但是存储过程都是直接编译好了之后直接运行即可
2.第二点优势就是减少网络流量,我们传输一个存储过程比我们传输大量的SQL语句的开销要小的多
3.第三点就是提高系统安全性,因为存储过程可以使用权限控制,而且参数化的存储过程可以有效的放置slq注入攻击,保证了其安全性
4.第四点就是耦合性降低,当我们表结构发生变化之后,我们可以修改相应的存储过程,我们的应用程序在一定程度上需要改动的地方就比较少了
5.第五点就是重用性强。因为我们在写好一个存储过程之后,再次调用只需要一个名称即可,也就是一次编写,随处调用,而且使用存储过程也可以让程序的模块化加强

存储过程的缺点

1.移植性差。因为存储过程是和数据库绑定的,如果我们更换数据库之类的 *** 作,可能很多地方需要改动。
2.修改不方便。因为对于存储过程而言,我们并不能特别有效的调试,他的一些BUG可能发现的会晚,增加了应用的危险性。
3.优势不明显赘余功能。对于小型的web应用来说,如果我们使用语句缓存,发现编译sql的开销并不大,但是使用在存储过程缺需要检查权限一类的开销,这些赘余功能也会在一定程度上拖累性能

总结

以上是内存溢出为你收集整理的【MySQL】存储过程全部内容,希望文章能够帮你解决【MySQL】存储过程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1151667.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存