Spring事务的相关知识点

事务的定义

通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。

事务的ACID原则(特性)

  • 事务的原子性(atomicity):表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
  • 事务的一致性(consistency):表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
  • 事务的隔离性(isolation):表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
  • 事务的持久性(durability):表示已提交的数据在事务执行失败时,数据的状态都应该正确。

Spring事务的隔离级别

  1. DEFAULT:
    这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应
  2. READ_UNCOMMITTED:
    读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻读。
  3. READ_COMMITTED:
    读提交,顾名思义,就是一个事务要等另一个事务提交后才能读取数据。保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
  4. REPEATABLE_READ:
    重复读,就是在开始读取数据(事务开启)时,不再允许修改操作.
    这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
  5. SERIALIZABLE:
    序列化,这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

Spring事务的传播行为

  1. PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
  2. PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
  3. PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。
  4. PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
  5. PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  6. PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
  7. PROPAGATION_NESTED: 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。