SQL中的存储过程和事务
2021/11/23 19:13:15
本文主要是介绍SQL中的存储过程和事务,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
存储过程
存储过程:针对比较复杂的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中的存储过程和事务的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南