ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL中的存储过程和事务

2021-11-23 13:36:07  阅读:150  来源: 互联网

标签:存储 set SQL -- tran 事务 error 过程


存储过程

存储过程:针对比较复杂的t_sql逻辑模块,进行封装,代码可以重用
存储过程:预编译
优点:
1、可以代码重用、便于维护
2、执行速度快
3、减低网络流量
4、安全性高(定义好的存储过程可以设置访问权限)
缺点:
不便于移植


存储过程分类:
1、系统存储过程(maseter 数据库中):系统提供的存储过程,在所有的数据库中无需用户再次定义都可以直接使用(调用)
调用存储过程语法格式:
exec 存储过程名称

2、自定义存储过程
1、无参存储过程
2、有参存储过程:
1)输入参数
2)输出参数 :必须使用output关键字
3)默认值:带默认值的存储过程,调用的时候可以给参数赋值,也可以不赋值,不传参的时候使用的是默认值,传参的时候使用的传递来的数据

创建存储过程语法格式:
create proc|procedure 存储过程名称
[参数列表]
as
sql语句

[参数列表]格式:@参数名 参数类型  (@name vachar(10) / @age int)

调用存储过程语法格式:
exec 存储过程名称

 

事务

事务:可以控制一个完整逻辑代码模块中的命令同时成功或同时失败
事务特性:
1、原子性:逻辑功能不可分割
2、隔离性:多个事务之间不冲突
3、一致性:要么全成功,要么全失败
4、持久性:事务处理完的功能数据永久保留


begin tran|transaction 事务名称        --开始事务
commit tran|transaction          --提交事务(逻辑功能模块全部成功)
rollback tran|transaction          --回滚事务(撤销所有操作)

--三毛给小毛转账1000元
--开始事务
begin tran tran_bank
--定义变量用来存储错误编号
declare @tran_error int
set @tran_error=0 --给变量赋初始值
update BANK set currentMoney=currentMoney-1000 where CustomerName='三毛'
--三毛减钱是否有异常
set @tran_error=@tran_error+@@error
update BANK set currentMoney=currentMoney+1000 where CustomerName='小毛'
--小毛加钱是否有异常
set @tran_error=@tran_error+@@error
if @tran_error>0
--有异常,回滚
begin
rollback tran --撤销所有操作
print '交易失败!'
end
else
--提交事务
begin
commit tran --提交所有操作
print '交易成功!'
end
go

 

create proc del_class @id int
as
begin tran
declare @error int = 0
delete from StuInfo where cid = @id
set @error += @@error
delete from ClassInfo where id = @id
set @error += @@error

if @error<>0
rollback
else
commit
go

exec del_class 1000

 

标签:存储,set,SQL,--,tran,事务,error,过程
来源: https://www.cnblogs.com/he-jianghai520/p/15592751.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有