Spring事务基本知识点
事务的ACID
事务是区分文件存储系统与NoSql
数据库重要特性之一,其存在的意义是为了保证即使在并发情况下也能正确的执行crud操作,怎样才算是正确的呢?这时提出了事务需要保证的四个特性ACID:
-
A:原子性(atomicity)
- 事务中各项操作,要么全做要么全不做,任何一项操作的失败都都会导致整个事务的失败;
-
C:一致性(consistency)
- 事务结束后系统状态是一致的;
-
I:隔离性(isolation)
- 并发执行的事务彼此无法看到对方的中间状态;
-
D:持久性(durability)
- 事务完成后所做的改动都会被持久化,即使发生灾难性的失败;
在高并发的情况下,要完全保证其ACID特性是非常困难的,除非把所有的事务串行化执行,但带来的负面的影响将是性能大打折扣。很多时候我们有些业务对事务的要求是不一样的,所以数据库中设计了四种隔离级别,供用户基于业务进行选择。
事务隔离级别
在高并发的场景下会出现的事务问题如下
Dirty Reads 脏读:
事务A正在对数据进行更新操作,但是更新还未提交,事务B