小邓与你一起快速了解 事务

事务

1.什么是事务

事务就是被绑定在一起作为一个逻辑工作单元的SQL语

句,如果任何一个语句操作失败那么整个操作就被失败,

进而回滚到操作前状态,或者是上个节点。为了确保要么

执行,要么不执行,就可以使用事务。要将一组语句作为

事务考虑,就需要通过ACID测试,即原子性,一致性,隔

离性和持久性。

2.事务的四大特性

a. 原子性:

事务是一个不可分割的整体,为了保证事务的总体目标,

事务必须具有原子性,即当数据修改时,要么全执行,要

么全不执行,即不允许事务部分的完成不可能停滞在中间

某个环节。事务在执行过程中发生错误,会被回滚(Ro

llback)到事务开始前的状态,就像这个事务从来没有执

行过一样。

b.一致性:

在事务开始之前和事务结束以后,数据库的完整性约束没

有被破坏。

c.隔离性:

隔离状态执行事务,使它们好像是系统在给定时间内执行

的唯一操作。如果有两个事务,运行在相同的时间内,执

行 相同的功能,事务的隔离性将确保每一事务在系统中认

为只有该事务在使用系统。这种属性有时称为串行化,为

了防止事务操作间的混淆, 必须串行化或序列化请 求,

使得在同一时间仅有一个请求用于同一数据。

d.持久性:

在事务完成以后,该事务所对数据库所作的更改便持久的

保存在数据库之中,并不会被回滚。

3.案例

此处用到的表
在这里插入图片描述
在这里插入图片描述
A转账给B
我们就普通的转账而不用事务,就相当于是普通的修改,值也是需要手动去给的,然而用事务的话,我们就可以直接写个存储过程,然后自动调用,会简单很多

update Customers set Remain=remain-100
 where NAME=A
update Customers set Remain=remain+100
 where NAME=B

–用事务写
先创建一个存储过程,定义三个我们所需要的变量,转账的账号,收钱的账号,金额

alter proc cp_charge(


@idOut int,
@idIn int,
@remain decimal(18,2)
)

在开始事务,首先我们要定义变量去记录错误的数量,
就比如说 A转账给B,B没有收到,然而钱也没了,所以我们要用一个变量去接收这个错误的信息,


as
--张三转账给李四
--开始事务
begin Transaction tran_Chargc
--定义变量记录错误数
declare @err_nums int
set @err_nums=0
begin try
--开始转账(修改)
update Customers set Remain=remain-@remain 
where id=@idOut
set @err_nums=@err_nums+@@error 
update Customers set Remain=remain+@remain
 where id=@idIn
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_Chargc --回滚事务
else
  commit   Transaction tran_Chargc --提交事务

  --调用存储过程
  exec cp_charge 10,11,100
  select * from Customers
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值