事务的特性ACID、隔离级别

1.事务特性ACID

      1.1 事务的四大特性

           1、原子性(Atomicity

                事务包装的一组sql,要么都执行成功,要么都失败。这些操作是不可分割的。

           2、一致性(Consistency

               数据库的数据状态是一致的。

         3、持久性:(Durability

              事务成功提交之后,对于数据库的改变是永久的。哪怕数据库发生异常,重启之后数据亦然存在。

        4、隔离性(Isolation

            一个事务的执行不能被其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

    1.2 一致性和原子性的区别

         一致性是保证整个操作成功或失败是符合预期的原子性,隔离性,持久性这三个特性是为了约束事务最终实现数据的一致性一致性和原子性的区别是:一致性强调的最终状态,要么是初始状态(事务回滚),要么是最终状态(任务成功执行完成);原子性强调的是操作的完整性,连续的操作不可分割,要么全部成功,要么全部失败。

       举例:张三给李四转账100元。那数据库假设需要 张三扣100,李四加100,记录一条流水。如果流水没记录成功,那整体回滚,张三也没转账成功,李四也没多钱。这就是原子性的体现。而张三必须扣100,李四必须加100,这个就是一致性了,如果因为某些逻辑原因,导致张三扣了100,流水记录100转账,而李四只加了60。然后这3条操作都成功了,那原子性就符合了,但是一致性就不符合了

 

2.事务的隔离级别

    2.1 事务并发问题

       1、脏读(最严重,杜绝发生)

             指一个事务读取了另外一个事务 未提交的数据。

       2、不可重复读

             在一个事务内多次读取表中的数据,第一次未修改,第二次修改了,多次读取的结果不同(强调的是数据内容的变化)

       3、幻读(虚读)

             在一个事务内多次读取表中的数据,第一次未增删,第二次增删了,多次读取的结果不同。(强调的是数据数量的变化)

     2.2 隔离级别

           1.read uncommitted 读未提交,一个事务读到另一个事务没有提交的数据。

               存在:3个问题(脏读、不可重复读、虚读)。

               解决:0个问题

           2.read committed 读已提交,一个事务读到另一个事务已经提交的数据。

              存在:2个问题(不可重复读、虚读)。

              解决:1个问题(脏读),通过在写的时候加锁,可以解决脏读。

          3.repeatable read :可重复读,在一个事务中读到的数据始终保持一致,无论另一个事务是否提交。

             存在:1个问题(虚读)。

             解决:2个问题(脏读、不可重复读),通过在读的时候加锁,可以解决不可重复读。

        4.serializable :串行化,同时只能执行一个事务,相当于事务中的单线程。

            存在:0个问题。

            解决:3个问题(脏读、不可重复读、虚读),通过串行化,可以解决虚读。

        安全和性能对比

              安全性:serializable > repeatable read > read committed > read uncommitted

              性能 : serializable < repeatable read < read committed < read uncommitted

        常见数据库的默认隔离级别:

              MySql:repeatable read

              Oracle:read committed

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沙糖橘

您的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值