没有合适的资源?快使用搜索试试~ 我知道了~
SQL 存储过程 procedure 讲解+代码实例
3 下载量 83 浏览量
2020-12-14
13:52:19
上传
评论
收藏 91KB PDF 举报
温馨提示
试读
3页
文章目录1. 存储过程和函数在实际项目中的使用2. 存储过程与函数的比较2.1. 共同点2.2. 不同点3. 变量的定义和使用3.1. 变量的定义3.1.1. 定义局部变量 declare3.1.2. 定义全局变量 set @3.1.3. 修改变量的值 set4. 存储过程 Stored Procedure4.1. 存储过程概述4.1.1. 存储过程的优点4.1.2. 存储过程的缺点4.2. 创建存储过程 create procedure4.2.1. 参数 in、out、inout4.3. 调用存储过程 call4.4. 查看存储过程4.4.1. 查看存储过程的状态4.4.2. 查看存储过程的
资源推荐
资源详情
资源评论
SQL 存储过程存储过程 procedure 讲解讲解+代码实例代码实例
文章目录文章目录1. 存储过程和函数在实际项目中的使用2. 存储过程与函数的比较2.1. 共同点2.2. 不同点3. 变量的定义和使用3.1. 变量的定义3.1.1. 定义局部变量 declare3.1.2. 定义全局变量 set @3.1.3. 修改变
量的值 set4. 存储过程 Stored Procedure4.1. 存储过程概述4.1.1. 存储过程的优点4.1.2. 存储过程的缺点4.2. 创建存储过程 create procedure4.2.1. 参数 in、out、inout4.3. 调用存储过程 call4.4. 查看存储
过程4.4.1. 查看存储过程的状态4.4.2. 查看存储过程的定义4.4.2. 从information_schema.Routines表查看存储过程的信息 mysql4.5. 修改存储过程 alter procedure4.6. 删除存储过程 drop procedure
1. 存储过程和函数在实际项目中的使用存储过程和函数在实际项目中的使用
存储过程和函数是SQL中非常实用的功能,它们可以大量简化SQL代码和优化SQL效率,但是在实际项目中应该尽量少用存储过程和函数
理由如下:
移植性差。例如在MySQL中的存储过程移植到SQL Sever上就不一定可以用了。
调试麻烦。目前没有专门为SQL开发的用于调试的IDE,无法像VS和Eclipse一样有明确的报错提示。
扩展性不高。存储过程是一种面向过程的方法,面对复杂的业务逻辑,过程化的处理会很吃力。
所以在大型项目中应该尽量少使用甚至不使用存储过程和函数。
2. 存储过程与函数的比较存储过程与函数的比较
2.1. 共同点共同点
调用时,只需要提供存储过程名或者函数名,以及参数信息,而无需将SQL语句发送到服务器,节省了网络开销。
可以重复使用。减少数据库开发人员和应用程序开发人员的工作量。
可以增强数据的安全访问控制。可以设定用户的执行权限。
2.2. 不同点不同点
函数必须有且仅有一个返回值,且必须指定返回值数据类型(字符串/数值)。存储过程可以没有返回值,也可以有返回值,甚至可以有多个返回值,且所有的返回值需要使用out或者inout参数定义。
函数体内可以使用select into语句为某个变量赋值,但不能使用select语句返回结果或结果集。存储过程则没有这方面的限制,存储过程甚至可以返回多个结果集。
函数可以直接嵌入到SQL语句中,而且函数可以用于扩展标准的SQL语句。存储过程一般需要单独调用,并不会嵌入到SQL语句中使用,调用时需要使用call关键字。
函数中的函数体限制比较多,比如函数体内不能使用打开、开始或结束事务的语句,如start transaction、commit、rollback或者set autocommit=0等语句,不能在函数体内使用预处理SQL语句。存储过
程的限制相对就比较少,基本上所有的SQL语句或MySQL命令都可以在存储过程中使用。
应用程序调用函数时,通常将函数添加到SQL语句中进行调用。应用程序调用存储过程时,必须使用call关键字进行调用,如果应用程序希望获取存储过程的返回值,就必须给存储过程的out参数或者
inout参数传递SQL会话变量,才能通过该会话变量获取存储过程的返回值。
3. 变量的定义和使用变量的定义和使用
3.1. 变量的定义变量的定义
3.1.1. 定义局部变量定义局部变量 declare
关键字declare用于在存储过程或者函数的begin end内部定义一个局部变量,作用范围在begin到end语句块之间。
语法如下:
declare [变量名1],[变量名2],...,[变量名n] [数据类型] [default [默认值]];
如语法所示,在declare关键字后面要指定变量名。变量名要注意尽量别使用关键字,不然容易出错。
指定变量的数据类型及其大小,变量可以用任何MySQL的数据类型,如int,varchar, datatime等。
定义出的变量初始值为Null,可以通过使用default关键字为变量指定默认值。
例如:
create procedure test(in i int)
begin
declare username varchar(20); -- 定义了一个varchar类型的局部变量username
declare adate, another date; -- 定义了两个data类型的局部变量username
declare total integer default 0; -- 定义一个varchar类型的局部变量username
end
3.1.2. 定义全局变量定义全局变量 set @
定义全局变量可以使用set语句,语法如下:
set @[变量名] = [值];
定义全局变量时,sql会自动判断值类型,这种变量要在变量名称前面加上“@”符号,表示一个会话变量,在会话的整个生命周期结束之前它都是有作用的。
例如:
set @var = 7; -- 定义一个值为7的全局变量var
set @username = '西瓜'; -- 定义一个值为'西瓜'的全局变量username
3.1.3. 修改变量的值修改变量的值 set
set关键字用于修改变量的值,例如:
create procedure test24(in i int)
begin
declare total integer default 0; -- 定义局部变量total,初始化为0;
set @var = 5; -- 定义全局变量var,初始化为7
set total = 1; -- 将局部变量total的值修改为1
set @var = 25; -- 将全局变量var的值修改为3
end
4. 存储过程存储过程 Stored Procedure
4.1. 存储过程概述存储过程概述
存储过程是一种在数据库中存储复杂程序,以便外部程序调用的数据库对象。
存储过程经编译创建并保存在数据库中,用户可通过指定存储过程的名字和给定参数来调用执行。存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用。
作个形象的比喻,存储过程也可以看作是一个”加工厂”,它接收”原料”(in参数)然后将这些原料加工处理成”产品”(out/inout参数),再把”产品”交付给”调用者”。
4.1.1. 存储过程的优点存储过程的优点
减少网络流量的使用
将重复性很高的一系列操作,封装到一个存储过程中,简化了SQL的调用
批量处理: 通过循环减少流量,也就是“跑批”
统一接口,确保数据安全。
4.1.2. 存储过程的缺点存储过程的缺点
存储过程往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
存储过程的性能调校与撰写受限于具体的数据库系统。
4.2. 创建存储过程创建存储过程 create procedure
创建存储过程的语法如下:
create
[definer = {user|current_user} ] procedure [过程名] ( [参数1],[参数2],...,[参数n] )
[[特征1],[特征2],...,[特征n]] [SQL代码];
-- definer 用于指定存储过程由哪个用户定义,默认是当前用户,注意不是指定存储过程的使用权限
-- [过程名] 该过程名用于指定存储过程,分别用户调用
-- [参数] 参数的形式为:[in|out|inout] [参数名] [参数类型],例如:in pcd_id int、inout pcd_username varchar(3)
资源评论
weixin_38507923
- 粉丝: 3
- 资源: 952
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功