脏读、不可重复读和幻读是数据库事务可能出现的问题,理解和解决这三类问题应该结合数据库事务隔离级别来学习和分析。
数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable
√: 可能出现 ×: 不会出现
脏读 | 不可重复读 | 幻读 | |
Read uncommitted | √ | √ | √ |
Read committed | × | √ | √ |
Repeatable read | × | × | √ |
Serializable | × | × | × |
脏读:是指一个事务读取到了另一个事务未提交的数据。
不可重复读:指一个事务读取时另一个事务可以修改数据。
幻读:一个事务读取时另一个事务insert操作。
这三类问题的解决方式就是依次提高数据库的事务隔离级别。
另外,一组相关概念:spring七种事务传播方式。
spring事务的七种传播方式主要是针对于方法中间传递时的事务机制,
例如:以方法B为当前主体 ,方法A调用了方法B ,作为方法B你看方法A
(1)PROPAGATION_REQUIRED(默认):如果A有事务则B加入A事务,如果A没有事务则新B建一个事务;