• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

SQL中的存储过程和事务

开发技术 开发技术 3天前 3次浏览

存储过程

存储过程:针对比较复杂的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

 


程序员灯塔
转载请注明原文链接:SQL中的存储过程和事务
喜欢 (0)