事物的ACID特性
原子性 (atomicity):强调事务的不可分割.;
一致性 (consistency):事务的执行的前后数据的完整性保持一致.;
隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰;
持久性(durability) :事务一旦结束,数据就持久到数据库;
脏读、幻读和不可重复读
脏读:A事物读取到B事物未提交的数据,B事物的数据可能会被回滚,所以是不准确的;
不可重复读:在一个事物内两次执行相同的查询语句,但是得到的结果却不一样,期间没有执行过任何DDL语句,像发生幻觉一样;
幻读:A事物对表中的全部数据行进行修改,同时,B事物向表插入新的数据,这时,操作A事物的用户发现表中还有没有被修改的数据换行,向发生了幻觉一样;
spring事物隔离级别
序号 | 隔离级别 | 说明 |
默认 | ISOLATION_DEFAULT | 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别. Oracle(读已提交) 、mysql(可重复读) |
读未提交 | ISOLATION_READ_UNCOMMITTED | 这是事务最低的隔离级别,它充许另外一个事务可以看到这个事务未提交的数据。 |
读已提交 | ISOLATION_READ_COMMITTED
| 保证一个事务修改的数据提交后才能被另外一个事务读取。 另外一个事务不能读取该事务未提交的数据。 |
可重复读 | ISOLATION_REPEATABLE_READ | 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。 |
串行化 | ISOLATION_SERIALIZABLE | 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。 |
Spring事物7种传播行为
序号 | 事务传播特性 | 说明 |
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类似的操作。 |