事务的四大特性和隔离级别

1、事务的特性(ACID):

     原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。

    一致性(Consistency):执行事务前后,必须是所有的数据都保持一致状态。

     隔离性(Isolation):并发事务执行之间无影响,在一个事务内部的操作对其他事务是不产生影响,这需要事务隔离级别来指定隔离性。

    持久性(Durability):一旦事务完成,数据库的改变必须是持久化的。

2、事务的隔离级别:

   为什么会出现事务的隔离级别呢:因为在企业级应用中(高并发的情况下),多用户访问数据库是常见的场景,这就是所谓的事务的并发,事务与事务之间可能产生的影响,事务并发所可能存在的问题:

     脏读:针对未提交数据)如果一个事务中对数据进行了更新,但事务还没有提交,另一个事务可以“看到”该事务没有提交的更新结果,这样造成的问题就是,如果    第 一 个事务回滚,那么,第二个事务在此之前所“看到”的数据就是一笔脏数据。

    不可重复读:针对其他提交前后,读取数据本身的对比)一个事务两次读同一行数据,可是这两次读到的数据不一样。不可重复读取是指同一个事务在整个事务过    程中 对同一笔数据进行读取,每次读取结果都不同。如果事务1在事务2的更新操作之前读取一次数据,在事务2的更新操作之后再读取同一笔数据一                                次,两 次结果是不同的。

    幻读:针对其他提交前后,读取数据条数的对比) 一个事务执行两次查询,但第二次查询比第一次查询多出了一些数据行。

    

   丢失更新:撤消一个事务时,把其它事务已提交的更新的数据覆盖了。

   不可重复都和幻读主要的区别是:前者注重的是数据修改,后者是数据添加。

  针对并发事务出现的问题,隔离级别就是为了防止这样的事情发生,根据业务的场景而定:

      ① Read uncommitted (读未提交):最低级别,任何情况都无法保证。

   ② Read committed (读已提交):可避免脏读的发生。

   ③ Repeatable read (可重复读):可避免脏读、不可重复读的发生。

   ④ Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

原文地址:https://www.cnblogs.com/xiaofeng-fu/p/12112070.html