什么是事务?
事务就是被绑定在一起作为一个逻辑工作单元的SQL语句组,如果任何一个语句操作失败那么整个操作就被失败,进而回滚到操作前状态,或者是上个节点。为了确保要么执行,要么不执行,就可以使用事务。要将一组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。
为什么要使用事务?
使用事务可以方便我们在添加数据是,出错而导致数据的混乱,所以我们在这时候就可以使用事务来回滚到最开始的操作之前,从而不让数据变得混乱。
列子:
我们以转账为例子
当我们转账给别人时,当我们已经把钱转去处,但对方没有收到时,这个时候会将我们的钱返回到我们的账户上。
现有一个表 Books 字段ID 和 Remain
这里我们用到之前的存储过程 与 事务结合做一个类似转账得程序
create proc pr_Charge --创建存储过程
(
@idin int, --转入账号
@idout int, --转出账号
@moeny int --转出金额
)
as
begin transaction tran_Charge --开始事务
declare @err_nums int
set @err_nums=0
begin try
update Books set Remain=Remain+@moeny where id=@idin
set @err_nums=@err_nums+@@ERROR
update Books set Remain=Remain-@moeny where id=@idout
set @err_nums=@err_nums+@@ERROR
end try
begin catch
print '错误编号'+convert(varchar,error_number())+'错误消息'+error_message()
set @err_nums=@err_nums+1
end catch
if(@err_nums>0)
rollback transaction tran_Charge --回滚
else
commit transaction tran_Charge --提交
execute pr_Charge 6,6,200 --执行存储过程
select * from Books --查询结果
总结:
事务可以方便我们在程序出错时,自动帮我们返回到操作数据之前。
让我们不用再去修改数据。