二、Oracle 事务的特性-ACID-简单形象通俗易懂

我们的上一篇文章中讲了数据库事务的简单概念,那么我们这一章讲一下数据库事务的几个特性,这里我们以Oracle为主。

第一:原子性(Atomicity)

事务是数据库的逻辑工作单位,这个单位里包含了一组操作,那么这个单位要么执行成功,要么失败;数据库为了实现这个效果,通俗的说:数据库将所有的操作都写入了“日志”(所谓的日志不是指通常的日志,具体的形式比如缓存还是文件之类的,我们在后面讲)暂时保存,如果中间有某个操作失败了,这时候数据库就可以根据“日志”回溯,把事务内执行成功的操作撤销,这就是所谓的“回滚”(rollback),从而达使这个事务内所有的DML操作失败,也就是整体失败;如果说事务内的所有操作都成功了,可以通过commit,将事务内的DML更改(增,删、改)的数据保存至数据库中(专业点的话叫作:持久化),一旦数据被持久化,是不可能再被回滚!!


第二:一致性(Consistemcy)

如果仔细的分析,曾经我对于原子性和一致性两者有些混淆,认为两者都是保证了数据库的事务的完整性,其实这样的说法是不太准确的,为了形象的表达一下观点,我举个例子:

如果把事务比作是一扇门,a,b,c作为一个整体穿过这扇门,成功的穿过之后,就变成了 A,B,C;那么我们来看,事务执行完毕前,abc三者保持了一致性,事务执行完毕之后,ABC三者保持了一致性。对于数据库事务来说,不可能出现AbC或者abC等不一致的情况;

那么我们可以认为:原子性是事务一致性的保证!!

PS: 这时候有人会说,我一个方法里有ABC操作,C操作的时候报错了,也没回滚,A和B操作成功了;

原因:程序没开事务,或者不在一个事务里(高端点的例子:Spring嵌套事务,或者Oracle的自治事务,不要急后面会讲到)


第三:持久性(Durability)

简单来说,事务提交后,数据会真正保存到数据库(生米煮成熟饭了),就不能回滚了(熟了还能再弄成生米??)


第四:隔离性(Isolation)

这个特性我先举个例子:有个浴室(外面无法偷看),假设每次只能进去一个人,在这个人出来之前,另外一个人不能进去,那么已经进去的这个人根本就不用担心被别人看光,因为浴室里就他一个人。但是外边的其他人就会等不及,显然浴室不够用;那么我们是不是把浴室隔成隔断间,那是不是很多人能一起进入浴室,使用不同的隔断间洗澡了~(当然,一个隔断间还是只允许一个人进去)

我们回到数据库事务,数据库就想到了一个办法,对于并发执行的事务隔离开,相互之前不影响执行!如果有两个相同的事务,在相同的时间内,执行相同的功能,这时候事务的隔离性起作用了,它会确保每一个事务在系统中认为只有自己在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。通过设置数据库的隔离级别,可以达到不同的隔离效果(后面的篇章中会讲到spring事务的隔离级别和传播机制)。

学到这里,有人会有问题了,

PS:并发执行的事务会引起哪些严重的问题呢?

我们下一章重点讲解:数据库并发执行事务引发的问题,精彩不容错过!!!

点击打开链接


  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值