事务(Transaction )的四大特性(原子性,一致性,隔离性和持久性(ACID)):

事务(Transaction )的四大特性,主要是作用在数据库的。通常情况下,为了避免出错,在对数据库的操作中,操作之前通常是开启事务的,在操作过程中用事务进行监控,等到操作完成以后,确保无误的情况下,再关闭事务,若中途有错误,事务会回滚,取消之前的操作。

典型的例子:给银行账户转账,在执行操作之前必须先开启事务,第一个账户的钱减少了,同时要确保第二个账户增加相同数量的钱,这就是一致性,若第一个账户减少的钱的数量和第二个账户没有增加相同数量的钱,这就说明程序执行中途有误,程序不能执行,必须回滚取消执行,如果第二个账户增加了数量相同的钱,表示程序职务正确,正常关闭事务。存入的钱没有被取出的情况下,是一直存在的,这就是持久性。两个账户之间是彼此独立的,要确保彼此的独立性,这就是隔离性。银行账户是在转账之前就存在的,这就是原子性。

原子性(Atomicity)

一致性(Consistency

隔离性(Isolation

事务隔离级别(Transaction Isolation Level):

  1.READ_UNCOMMITTED(read_uncommitted)

  2.READ_COMMITTED(read_committed)

  3.REPEATABLE_READ(repeatable_read)

  4.SERIALIZABLE(serializable)

从上往下,级别越来越高,并发性越来越差,安全性越来越高,反之则反。

持久性(Durability)

原子性是基础,隔离性是手段,持久性是目的,真正的老大就是一致性。

三类数据读问题

  1.Dirty Read(脏读)

  2.Unrepeatable Read(不可重复读)

  3.Phantom Read(幻读)

两类数据更新问题

  1.第一类丢失更新

  2.第二类丢失更新

Spring 提供的 7 种事务传播行为:

  1.PROPAGATION_REQUIRED

  2.RROPAGATION_REQUIRES_NEW

  3.PROPAGATION_NESTED

  4.PROPAGATION_SUPPORTS

  5.PROPAGATION_NOT_SUPPORTED

  6.PROPAGATION_NEVER

  7.PROPAGATION_MANDATORY

1.事务超时(Transaction Timeout):为了解决事务时间太长,消耗太多的资源,所以故意给事务设置一个最大时常,如果超过了,就回滚事务。

2.只事务(Readonly Transaction):为了忽略那些不需要事务的方法,比如读取数据,这样可以有效地提高一些性能。

 

猜你喜欢

转载自blog.csdn.net/wyqwilliam/article/details/81196751