事务四大特性

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。

特性:事务是恢复和并发控制的基本单位。

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性(durability)。指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

 

我们在项目中是使用spring的AOP来控制事务的,主要配置了事务的传播特性和service业务逻辑层的切面位置,事务的传播特性主要有:

PROPAGATION(pa bu lei gei shen)_REQUIRED(re kuai er de)

支持当前事务,如果当前没有事务,就新建一个事务

PROPAGATION_SUPPORTS(si po er ci)

支持当前事务,如果当前没有事务,就以非事务方式执行

PROPAGATION_MANDATORY(man de te rui)

支持当前事务,如果当前没有事务, 就抛出异常等,我们平常使用PROPAGATION_REQUIRED居多。

spring中事务的传播特性好像有5个左右,我做项目的时候使用最多的就是PROPAGATION_REQUIRED,它所代表的意思支持当前事务,如果当前没有事务,就新建一个事务。

spring中事务的隔离级别有5个,默认使用的是ISOLATION(ai si lei shen)_DEFAULT, 

它代表使用数据库默认的事务隔离级别,也是我们项目中最常使用的。除此之外还有:

读未提交:

它充许另外一个事务可以看到这个事务未提交的数据,这种隔离级别会产生脏读,不可重复读和幻像读。

读提交:

保证一个事务修改的数据提交后才能被另外一个事务读取,也是大多数数据库的默认值。可以避免脏读,但会产生不可重复读和幻像读。

重复读:

在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。

串行化:

顺序执行事务。除了防止脏读,不可重复读外,还避免了幻像读。并发性也最低,但最安全。

不可重复读的重点是修改 :

同样的条件 , 你读取过的数据 , 再次读取出来发现值不一样了 。

幻读的重点在于新增或者删除 :

同样的条件 , 第 1 次和第 2 次读出来的记录数不一样。

你可能感兴趣的:(java,java)