事务的特征、隔离级别以及事务的传播

事务

一组具有明确边界的,并且是有一定顺序的执行过程。
是企业开发过程中必不可少的一门技术。
通常用来确保一组执行过程的完整性与一致性。

例如:张三给李四转钱,这就是一个完整的过程,任何一部出问题,事务都是不完整的。

事务的四大特征:
原子性(Atomicity):事务是一个完整的过程,不可以再次划分。具有原子的特征。

一致性(Consistency):一旦事务进行,无论有多少个事务,处理事务的过程中,数据总是满足质量守恒定律。入多少---出多少。

隔离性(Isolation):事务与事务执行过程中,不同的事务之间是相互隔离的,互不干涉。

持久性(Durability):事务一旦确定下来,那么结果就必须要确实下来,不应该再次被同一事务进行破坏。如果要变动,也应该另起一个新的事务。

事务如果按照类型来进行分类:

逻辑事务:是为了保证业务逻辑的完整性与准确性。

物理事务:是为了保证业务数据的准确性。

通常来说:一个逻辑事务包含多个物理事务 。

在spring框架内,处理事务,通常有2种方式:

编程试事务:将事务管理的代码嵌入到业务逻辑的方法上,通过这种方式来控制事务的提交或者回滚。 这种方式简单粗暴,但是有个缺点:在编程式事务中,必须在每个业务操作的方法上都包含额外的事务管理代码。

声明式事务:将事务管理代码从业务中分离出来,交给springAOPen切面来进行管理。我们只需要在spring配置文件中声明如何去管理事务就可以了,在企业应用开发中,声明式事务较为常见。

事务的隔离级别:

1.可串行化(Serializable)---这是事务处理的最高隔离级别,相当于线程同步后的结构,它不能保证得到的是什么结果,但至少可以保证得到的是准确的。

其他的隔离级别虽然处理事务的效率有所提升,但是都会在一定程度上导致数据的不准确。

2.可重复读(Repeatable Read)---使用较为广泛,它的隔离级别仅次于可串行化,但是会产生一个问题:它会导致幻读,给操作者造成不应该有的幻觉。

------所谓幻读,是指当前事务不是独立执行的时候发生的情况,例如:

------有两个事务操作同一张表,A的事务修改了表中大部分数据,并且做了提交,但是尚未查询。B的事务刚好修改到A操作数据中的一部分数据,然后A再查询,这个时候就会给A造成一种没修改完毕的幻觉。

3.读已提交(Read committed)---它的隔离级别仅次于可重复度,但是它同样也有一个问题:它会导致不可重复读。

所谓的不可重复读是在数据库访问过程中,一个事务范围内两次或多次的查询结果不一致。在同一个事务中,多次读取同一数据,得到的结果却是不一样的。它是由于在读的间隙过程中,有另外一个事务修改了同样的数据,从而导致前一个事务多次得到的结果不一致。

对于数据库而言,不可重复读要比幻读来得更加容易一些,因此“可重复读”比“读已提交”有更好的正确性。所以项目中更多的使用可重复读。

4.读未提交(Read uncommitted)---隔离级别最低,项目中几乎没有人使用,其原因是:它会导致脏读,事务在处理的过程中,可以读取到其他事务尚未提交的数据,然后对尚未提交的数据进行业务处理。

项目中具体应该采用哪种隔离级别,要根据系统所在业务环境具体分析

事务的传播,当多个具有事务能力的Service实现类的方法互调的时候,所形成的复杂事务边界控制的问题。
Spring框架中常见的事务传播控制方式有以下7种:
(调用者---被调用者 支持当前事务,是指调用者如果拥有事务,被调用者也要遵循该事务)

1.REQUIRED:支持当前事务,如果没有事务,就新建一个事务------(CUD)★★★

2.REQUIRES_NEW:无论调用者有没有事务,都新建一个新的事务,如果有事务,则将事务挂起,按照新的事务来执行。

3.SUPPORTS:如果有事务,则支持当前事务,如果没有事务,则以非事务方式执行★★★

4.MANDATORY:如果有事务,在支持当前事务,如果没有事务,则抛出无事务异常

5.NOT-SUPPORTED:以非事务方式执行,如果有事务,就事务挂起

6.NEVER:绝对不能在事务环境下运行,如果有事务,就将事务挂起,该传播对应的方法只有在没有关联到事务的情况下才会执行。

7.如果调用者与被调用者同时拥有事务,则将被调用者的事务嵌套到调用者的事务中,如果没有事务,则按照第一种方式来处理。

时间: 2024-10-07 06:32:57

事务的特征、隔离级别以及事务的传播的相关文章

MYSQL数据库事务4种隔离级别及7种传播行为

事务的特性: 原子性:事务的不可分割,组成事务的各个逻辑单元不可分割. 一致性:事务执行的前后,数据完整性保持一致. 隔离性:事务执行不应该受到其他事务的干扰. 持久性:事务一旦结束,数据就持久化到数据库中. 查看/设置隔离级别 查看:SELECT @@tx_isolation  设置:set tx_isolation='xxx' 事务的隔离级别 如果不考虑隔离性,引发一些安全问题 隔离性:一个事务的执行,不应该受到其他事务的干扰. 脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致

事务隔离级别对事务的影响验证

通过四个操作分别验证,事务隔离级别对事务的影响    READ UNCOMMITTED:读未提交    READ COMMITTED:读提交    REPEATABLE READ:可重读    SERIALIZABLE:可串行 READ UNCOMMITTED(读未提交)验证:启动两个终端事务操作之前的表mysql> SELECT * FROM students;+-----+--------------+------+--------+------+------+------+--------

MySQL事务四个隔离级别

MySQL事务隔离级别详解             MySQL数据结构SQL SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销. Read Uncommitted (读取未提交的内容)  在该隔离级别,所有事务都可以看到其他未提交事务的执行结果.本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少.读取未提交的数据,也被称之为脏读(Dirty Read).Read Commit

数据库事务中的隔离级别和锁+spring Transactional注解

数据库事务中的隔离级别和锁 数据库事务在后端开发中占非常重要的地位,如何确保数据读取的正确性.安全性也是我们需要研究的问题. ACID 首先总结一下数据库事务正确执行的四个要素(ACID): 原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做,不能只做一部分:一致性(Consistency):在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是处于正确的状态,即数据完整性约束没有被破坏:比如我们做银行转账的相关业务,A转账给B,要求

Spring的4种事务特性,5种隔离级别,7种传播行为

spring事务: 什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 事务特性(4种): 原子性 (atomicity):强调事务的不可分割. 一致性 (consistency):事务的执行的前后数据的完整性保持一致. 隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰 持久性(durability) :事务一旦结束,数据就持久到数据库 如果不考虑隔离性引发安全性问题: 脏读 :一个事务读到了另一个事务的未提交的数据 不可重

深入解析Mysql中事务的四大隔离级别及其所解决的读现象

本文详细介绍四种事务隔离级别,并通过举例的方式说明不同的级别能解决什么样的读现象.并且介绍了在关系型数据库中不同的隔离级别的实现原理. 在DBMS中,事务保证了一个操作序列可以全部都执行或者全部都不执行(原子性),从一个状态转变到另外一个状态(一致性).由于事务满足久性.所以一旦事务被提交之后,数据就能够被持久化下来,又因为事务是满足隔离性的,所以,当多个事务同时处理同一个数据的时候,多个事务直接是互不影响的,所以,在多个事务并发操作的过程中,如果控制不好隔离级别,就有可能产生脏读.不可重复读.

重新理解mysql的锁、事务隔离级别及事务传播行为

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行.ACID,是指在可靠数据库管理系统(DBMS)中,事务(Transaction)所应该具有的四个特性:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability). 原子性原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生.如,A向B转钱,在事务中的扣款和加款两条语句,要么

数据事务四种隔离机制和七种传播行为

一.隔离级别: 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Serializable,这四个级别可以逐个解决脏读.不可重复读.幻读这几类问题. 1. ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据.      这种隔离级别会产生脏读,不可重复读和幻像读.2. ISOLATION_READ_COMMITTED:保证一个事务修改的

SqlServer——事务—锁与隔离级别

隔离实际上是通过锁来实现的,作用于整个事务,它通常在事务开始前指定,如 SET TRANSACTION ISOLATION LEVEL READ Committed,指定后面的事务为 已提交读:而锁是在我们执行某一具体的SQL语句时在from中指定锁模式来实现的,它可以覆盖掉已指定隔离级别下应用的锁类型.隔离级别牺牲并发性来实现一致性. 并发:是指在相同的时间,多个用户访问相同的数据.它通常引起以下问题:脏读:丢失更新:不可重复度:幻读: 脏读:一个进程读取了另一个进程尚未提交的数据. 不可重复