目录
什么是事务?
是数据库操作的最小工作单元,是作为单个逻辑工作执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行,要么都不执行,事务是一组不可在分割的操作几何。
一句话:一荣俱荣一辱俱辱。
一、事务的四大特性(ACID)
-
原子性(Atomicity):
事务中的所有操作是不可在分割的原子单位。所有操作都是一荣俱荣一辱俱辱
-
一致性(Consistency):
事务执行后,数据库状态与其他业务规则保持一致。如转账业务,无论事务是否成功,参与转账的两个账号余额之和应该是不变的
-
隔离性(Isolation):
隔离性是指在并发操作中,不同事物之间应该隔离开的,是每个并发中的事务互不干扰。
-
持久性(Durability):
一旦事务提交成功,事务中的所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。
二、事务隔离级别
数据并发问题
1.脏写(Dirty Write)
对于两个事务A,B,如果事务A修改了另一个未提交事务B修改过的数据,就意味着发生了脏写
2.脏读(Dirty Read)
事务A读取了已经被事务B更新了但是还没被提交的字段。之后若事务B回滚,事务A读取的内容就是临时切无效的。
3.不可重复读(Non-Repeatable Read)
事务A读取了一个字段,然后事务B更新了字段,之后事务A再次读取同一个字段,值就不同了。那就意味着发生了不可重复度。
4.幻读(Phantom)
事务A读取了一个字段,然后事务B在该表插入了一些新的行。之后如果事务A再次读取同一个表,就会多出几行。
sql中的四种隔离级别
小结:
数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性
就越好,但并发性越弱
三、Spring事务的传播特性
是什么?
就是当一个事物方法被另一个事务方法调用时,这个事务方法应该如何进行