面试相关 事务浅析
事务特性
原子性(Atomicity): 事务包含的所有操作要么全部成功,要么全部失败回滚
一致性(Consistency): 事务必须使数据库从一个一致性状态变换到另一个一致性状态
隔离性(Isolation): 一个事务执行的过程中,不应该受到其他事务的干扰
持久性(Durability): 事务一旦结束,数据就持久到数据库
Spring事务传播机制
所谓事务传播机制,也就是事务在多个方法的调用中是如何传递的,是重新创建事务还是使用父方法的事务?父方法的回滚对子方法的事务是否有影响?这些都是可以通过事务传播机制来决定的
事务传播机制 | 特性 |
---|---|
REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED) | 支持当前事务,如果没有事务会创建一个新的事务(默认) |
SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS) | 支持当前事务,如果没有事务的话以非事务方式执行 |
MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY) | 支持当前事务,如果没有事务抛出异常 |
REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW) | 创建一个新的事务并挂起当前事务,执行完新事务后继续执行挂起事务 |
NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED) | 以非事务方式执行,如果当前存在事务则将当前事务挂起 |
NEVER(TransactionDefinition.PROPAGATION_NEVER) | 以非事务方式进行,如果存在事务则抛出异常 |
NESTED(TransactionDefinition.PROPAGATION_NESTED) | 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作 |
Spring事务隔离界别
事务隔离界别 | 特性 |
---|---|
isolation_default | 使用数据库默认的事务隔离级别(默认) |
isolation_read_uncommitted | 允许读取尚未提交的修改,可能导致脏读、幻读和不可重复读 |
isolation_read_committed | 允许从已经提交的事务读取,可防止脏读、但幻读,不可重复读仍然有可能发生 |
isolation_repeatable_read | 对相同字段的多次读取的结果是一致的,除非数据被当前事务自生修改。可防止脏读和不可重复读,但幻读仍有可能发生 |
isolation_serializable | 完全服从acid隔离原则,确保不发生脏读、不可重复读、和幻读,但执行效率最低 |
学习所得,资料、图片部分来源于网络,如有侵权,请联系本人删除。
才疏学浅,若有错误或不当之处,可批评指正,还请见谅!