数据库事务包含下面四个特性:
- 原子性(Atomicity):是指一个事务要么全部执行,要么不执行。也就是说一个事务不可能只执行了一半就停止了。
- 一致性(Consistency):是指事务的运行并不改变数据库中数据的一致性。例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变。
- 隔离性(Isolation):是指两个以上的事务不会出现交错执行的状态。因为这样可能会导致数据不一致。
- 持久性(Durability):事务的持久性是指事务执行成功以后,该事务对数据库所作的更改便是持久的保存在数据库之中,不会无缘无故的回滚。
原子性四基础,隔离性是手段,持久性是目的。原子性、隔离性、持久性都要服务于一致性。
隔离性是手段,有四个手段(级别):
- Read Uncommitted(读取未提交内容)
- Read Committed(读取提交内容,mysql的默认隔离级别)
- Repeatable Read(可重读)
- Serializable(可串行化)
上面四个手段从上到下,级别越来越高,并发性越来越差,安全越来越高。
高并发下容易产生的问题(都是因为隔离级别导致的):
- Dirty Read(脏读)
- Unrepeatable Read(不可重复读)
- Phantom Read([?fænt?m]幻读)
脏读:事务A读到了事务B未提交的数据,事务A基于此做了其他操作。
不可重复读:事务A读取到了事务B已提交的更改数据。
幻读:鬼在读,不知道发生了什么事情。事务A读取到了事务B已提交的新数据。
隔离级别以及高并发下可能出现的问题:

--------------------------------------------------
spring的隔离级别设置:
db#事务#隔离级别#spring事务
原文:https://www.cnblogs.com/luohaonan/p/12492126.html