`

事务隔离级别

 
阅读更多



 

共有四种:

 

读未提交(Read uncommitted)

定义:一个事务可以读取另一个未提交事务的数据。

事例:老板给程序员发工资,程序员的工资是3.6万/月。但发工资时老板不小心按错数字,按成3.9万/月,改钱已打到程序员账户,但事务还没提交,这时,程序员去查看自己这个月的工资,发现比往常多了3千元,以为涨工资了非常高兴。但是老板及时发现不对,马上回滚差点就提交了的事务,将数字改成3.6万再提交。

分析:程序员这个月工资还是3.6万,但是程序员看到的是3.9万。他看到的是老板还没提交事务时的数据。这就是“脏读”。

 

读提交(Read committed)

定义:一个事务要等另一个事务提交后才能读取数据。

事例:程序员拿着信用卡去享受生活(卡里有3.6万),当他买单时(程序员事务开启),收费系统事先检测到他的卡里有3.6万,此时,程序员的妻子要把钱全部转出充当家用,并提交。当收费系统扣款时,在检测到卡里的金额,发现已经没钱了(第二次检测要等妻子转出金额事务提交完成)。程序员很郁闷,明明卡里是有钱的。。。

分析:如果有事务对数据进行更新(update)操作时,读操作要等这个更新操作事务提交后才能读取数据,可以解决脏读问题。但事例中,出现一个事务范围内两个相同查询却返回了不同数据,这就是不可重复读。

 

重复读(Repeatable read)

定义:开始读取数据(事务开启)时,不允许修改操作。

事例:程序员拿着信用卡去享受生活(卡里有3.6万),当他买单时(事务开启,不允许其他事务的update修改操作),收费系统事先检测到卡里有3.6万。这个时候他的妻子不能转出金额了。接下来收费系统就可以扣款了。

分析:重复读可以解决不可重复读问题,不可重复读对应的是修改,即update操作。但可能还会有幻读问题。幻读对应的是插入insert操作,而不是update操作。

 

序列化(Serializable)

定义:序列化是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读和幻读。但这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

实例:程序员一天去消费,花了2千元,然后他的妻子去查看他今天的消费记录(全表扫描,妻子事务开启),看到确实是花了2千元,就这个时候,程序员花了1万买了一部电脑,即新增insert了一条消费记录,并提交。当妻子打印程序员的消费记录清单时(妻子事务提交),发现花了1.2万元,似乎出现幻觉,这就是幻读。

 

总结:

1.脏读:事务A提取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。

2.不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据做了更新并提交,导致事务A多次读取同一数据时,结果不一致。

3.幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生幻觉一样,这就叫幻读。

4.不可重复读和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需要锁住满足条件的行,解决幻读需要锁表。

5.隔离级别越高,越能保证数据的完整性和一致性,但对并发性能的影响也越大。

6.大多数数据库默认的事务隔离级别是“读提交”,比如sql server,oracle。mysql的默认隔离级别是可重复读。

  • 大小: 9.3 KB
分享到:
评论

相关推荐

    MY SQL 事务隔离 查询:默认事务隔离级别

    查询:默认事务隔离级别 mysql> select @@tx_isolation;当前会话的默认事务隔离级别 mysql> select @@session.tx_isolation;当前会话的默认事务隔离级别 mysql> select @@global.tx_isolation;全局的事务隔离级别

    MySQL事务隔离级别

    MySQL事务隔离级别是数据库管理系统中一个非常重要的概念,它关系到数据的一致性和并发性能。在MySQL中,事务被用于确保数据库操作的原子性、一致性、隔离性和持久性(ACID特性)。事务隔离级别主要涉及四个方面:读...

    MySQL的四种事务隔离级别

    MySQL数据库管理系统提供了四种事务隔离级别来处理事务并发中可能遇到的问题。事务并发问题通常包括脏读、不可重复读和幻读。 一、事务的基本要素(ACID) 事务具有四个基本要素,即原子性(Atomicity)、一致性...

    spring常用数据库事务传播属性和事务隔离级别1

    Spring 框架提供了一套完善的事务管理机制,其中包含了多种事务传播属性和事务隔离级别。这些特性使得在处理数据库操作时,能够更好地控制事务的边界和行为,从而确保数据的一致性和完整性。 首先,我们来看一下...

    SPRING事务传播特性&事务隔离级别

    ### Spring 事务传播特性和事务隔离级别详解 #### 一、Spring 事务传播特性 在进行多层服务架构设计时,事务的管理尤其重要。为了确保数据的一致性,Spring 提供了一种灵活的方式来控制事务的传播行为。下面详细...

    SQLserver锁和事务隔离级别的比较与使用

    SQL Server的锁机制和事务隔离级别是数据库管理系统中确保数据一致性、避免并发问题的重要机制。在SQL Server中,锁主要用于控制多个用户同时访问同一数据时的并发操作,而事务隔离级别则是确定在事务中如何处理这些...

    06-VIP-深入理解Mysql事务隔离级别与锁机制.pdf

    深入理解Mysql事务隔离级别与锁机制 Mysql事务隔离级别与锁机制是数据库系统中非常重要的概念,它们都是为了解决多事务并发问题而设计的。下面我们将深入讲解这些机制,让大家彻底理解数据库内部的执行原理。 事务...

    事务传播特性&事务隔离级别

    事务传播特性&事务隔离级别 事务传播特性是指在 Java 中,事务的传播行为,即在多个事务之间如何交互和传播。Java 中有七种事务传播特性,分别是: 1. PROPAGATION_REQUIRED:如果存在一个事务,则支持当前事务。...

    MySQL数据库:事务隔离级别.pptx

    事务隔离级别 课程目标 了解 —— 事务隔离级别的概念; 理解 —— 事务隔离的四种级别; 掌握 —— 事务隔离级别的设置; 事务隔离级别 事务隔离:每一个事务都有一个所谓的隔离级,它定义了用户彼此之间隔离和交互...

    数据库事务隔离级别

    介绍数据库事务的四种隔离级别,比较不同隔离级别的区别和影响

    SQLSERVER事务隔离级别的实验研究.pdf

    在多用户并发访问数据库系统时,事务隔离级别的设置对于保障数据一致性与系统并发性能之间至关重要。本文档详细探讨了SQL Server中不同事务隔离级别的实验研究,揭示了各隔离级别与锁管理之间的关系,并通过实验验证...

    spring事务的传播特性和事务隔离级别

    ### Spring事务的传播特性和事务隔离级别 #### 一、Spring事务的传播特性(Propagation) 在Spring框架中,事务管理不仅提供了ACID属性的支持,还引入了事务的传播特性,这些特性决定了当一个方法调用另一个方法时,...

    事务隔离级别 .pdf

    **事务隔离级别** 在计算机科学,尤其是数据库管理系统(DBMS)的设计中,事务隔离级别是确保数据一致性、避免并发操作导致的问题的关键概念。事务是一系列数据库操作的逻辑单元,它们要么全部成功,要么全部失败。...

    数据库事务隔离级别.docx

    ### 数据库事务隔离级别详解 #### 一、引言 在多用户共享的数据库系统中,为了保证数据的一致性和准确性,必须对并发事务进行控制。数据库事务隔离级别是用来管理多个事务之间相互影响的程度,主要解决的问题包括脏...

    事务隔离级别 .docx

    【事务隔离级别】 在计算机科学,特别是在数据库管理系统(DBMS)中,事务隔离级别是确保数据库并发操作一致性的重要概念。事务是一系列数据库操作的逻辑单元,必须作为一个整体执行,要么全部成功,要么全部失败。...

    Hibernate 事物隔离级别 深入探究

    Hibernate 事务隔离级别 深入探究 在 Hibernate 中,事务隔离级别是指数据库系统提供的一种机制,以解决并发事务带来的问题。为了确保数据库的可靠性和一致性,Hibernate 提供了四种事务隔离级别,分别是 ...

    怎么理解SQL SERVER中事务隔离级别及相应封锁机制.pdf

    理解SQL Server中事务隔离级别及相应封锁机制 SQL Server中事务隔离级别是数据库管理系统中一个重要的概念,它决定了事务之间的并发执行和数据的一致性。本文将详细介绍SQL Server中事务隔离级别的概念、分类、特点...

    52 MySQL是如何支持4种事务隔离级别的?Spring事务注解是如何设置的?l.pdf

    MySQL 支持四种事务隔离级别:READ UNCOMMITTED(读未提交)、READ COMMITTED(读已提交)、REPEATABLE READ(可重复读)和 SERIALIZABLE(串行化)。每种隔离级别对应不同程度的事务并发问题的防范,其中,MySQL ...

Global site tag (gtag.js) - Google Analytics