事务存储过程

307 阅读2分钟

事务

/* 事务:可以控制一个完整逻辑代码模块中的命令同时成功或同时失败

事务特性: 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

存储过程

/*

存储过程:针对比较复杂的t_sql逻辑模块,进行封装,代码可以重用

存储过程:预编译

优点:

1、可以代码重用、便于维护

2、执行速度快

3、减低网络流量

4、安全性高(定义好的存储过程可以设置访问权限)

缺点:

不便于移植

存储过程分类:

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

调用存储过程语法格式:

exec 存储过程名称

2、自定义存储过程

1、无参存储过程

2、有参存储过程:

1)输入参数 

2)输出参数 :必须使用output关键字

3)默认值:带默认值的存储过程,调用的时候可以给参数赋值,也可以不赋值,不传参的时候使用的是默认值,传参的时候使用的传递来的数据

创建存储过程语法格式:

create proc|procedure 存储过程名称

[参数列表]

as

sql语句

调用存储过程语法格式:

exec 存储过程名称

-- */