`
jaychang
  • 浏览: 731378 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

数据库事务隔离级别-幻读与不可重复读的区别

 
阅读更多

不可重复读

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

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

例子:

在事务1中,Mary 读取了自己的工资为1000,操作并没有完成 

Java代码  收藏代码
  1. con1 = getConnection();  
  2. select salary from employee empId ="Mary";  

 



在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务. 

Java代码  收藏代码
  1. con2 = getConnection();  
  2. update employee set salary = 2000;  
  3. con2.commit();  



在事务1中,Mary 再次读取自己的工资时,工资变为了2000 

Java代码  收藏代码
  1. //con1  
  2. select salary from employee empId ="Mary";  



在一个事务中前后两次读取的结果并不致,导致了不可重复读。

 

 

幻读

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

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

例子:

目前工资为1000的员工有10人。 
事务1,读取所有工资为1000的员工。 

Java代码  收藏代码
  1. con1 = getConnection();  
  2. Select * from employee where salary =1000;  

共读取10条记录 

这时另一个事务向employee表插入了一条员工记录,工资也为1000 

Java代码  收藏代码
  1. con2 = getConnection();  
  2. Insert into employee(empId,salary) values("Lili",1000);  
  3. con2.commit();  



事务1再次读取所有工资为1000的员工 

Java代码  收藏代码
  1. //con1  
  2. select * from employee where salary =1000;  



共读取到了11条记录,这就产生了幻像读。 

 

事务的隔离级别:

1.READ_UNCOMMIT  读未提交的事务   A事务修改了一条记录未提交,B事务读取该记录,就会导致脏读、不可重复读,幻读。

 

2.READ_COMMIT  读已提交的事务   A事务修改了一条记录,B事务不允许读,只有当A事务提交了,B事务才能读取该记录。可以避免脏读,但会导致不可重复读和幻读。

 

3.REPEATABLE_READ 不仅能实现READ_COMMIT的功能,而且还能阻止当A事务读取了一条记录,B事务不允许修改;阻止脏读和不可重复读,但不能避免幻读。

 

.

4.SERIALIZABLE 此级别下事务是顺序执行的,可以避免上述级别的缺陷,但开销较大

 

5.DEFAULT: 使用当前数据库默认的级别

 

 

 

分享到:
评论

相关推荐

    数据库事务隔离级别.docx

    数据库事务隔离级别是用来管理多个事务之间相互影响的程度,主要解决的问题包括脏读、不可重复读、幻读等。 #### 二、事务隔离级别的定义与作用 事务隔离级别是指数据库系统为每个事务提供的一种环境,以确保事务在...

    mysql数据库事务隔离级别借鉴.pdf

    以下是对MySQL数据库事务隔离级别的详细解释。 1. **丢失更新**:在并发环境下,一个事务的更新可能被另一个事务的更新覆盖,导致前一个事务的更改丢失。 2. **脏读**:一个事务读取到了另一个事务还未提交的数据...

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

    5. **Isolation.SERIALIZABLE**:最高的隔离级别,完全避免了脏读、不可重复读和幻读,但性能最差,因为需要锁定事务涉及的所有行。 在实际应用中,开发者需要根据业务需求来选择合适的事务传播属性和隔离级别,以...

    MySQL事务隔离级别

    MySQL默认的事务隔离级别是可重复读,它能防止脏读和不可重复读。在这个级别下,事务在整个事务期间可以看到一致的数据视图,即同一查询始终返回相同的结果,除非事务自己对数据进行了修改。然而,幻读问题依然存在...

    数据库锁(行锁,表锁,共享锁,排他锁)脏读、不可重复读、幻读和事物隔离级别

    3. 可重复读(Repeated Read):保证同一事务内的多次读取返回相同数据,防止不可重复读,但幻读仍可能发生,如MySQL InnoDB引擎通过Next-Key Locks解决。 4. 串行化(Serializable):最严格的隔离级别,通过读写...

    mysql数据库事务隔离级别[参照].pdf

    MySQL数据库提供了四种不同的事务隔离级别,它们分别是读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)以及串行化(Serializable)。每种隔离级别都有其特点,用于权衡数据...

    数据库事务与隔离级别.docx

    数据库事务与隔离级别 数据库事务是指一系列操作的集合,作为一个单元执行,以维护数据库的一致性和...数据库提供了多种隔离级别以避免这些问题,例如Serializable(串行化)可以避免脏读、不可重复读、幻读的发生。

    数据库事务与隔离技术

    - **读已提交**:每次读取的数据都是其他事务已经提交的,避免了脏读,但可能出现不可重复读和幻读。 - **可重复读**:在事务内多次读取同一数据,结果始终一致,防止不可重复读,但幻读仍然可能发生。 - **串行...

    MySQL数据库事务隔离级别详解

    在多用户同时访问数据库的情况下,事务隔离级别能够确保数据的一致性和完整性,避免并发操作带来的各种问题,如脏读、不可重复读和幻读。 1. 脏读(Dirty Read): 脏读指的是在一个事务中,事务A读取了事务B还未...

    MySQL的四种事务隔离级别

    事务并发问题通常包括脏读、不可重复读和幻读。 一、事务的基本要素(ACID) 事务具有四个基本要素,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),这四个要素是事务...

    数据库事务的隔离级别1

    数据库事务的隔离级别是数据库管理系统在并发环境中保证数据一致性、避免脏读、不可重复读和幻读等问题的关键机制。在数据库领域,ACID(原子性、一致性、隔离性、持久性)理论是事务处理的基本原则。 1. **原子性...

    Hibernate 事物隔离级别 深入探究

    Hibernate 事务隔离级别 深入探究 在 Hibernate 中,事务隔离级别是...Repeatable Read 隔离级别可以避免脏读和不可重复读问题,而 Read Committed 和 Read Uncommitted 隔离级别则分别可以避免脏读和不可重复读问题。

    02.Spring支持的常用数据库事务传播属性和事务隔离级别.zip

    事务隔离级别是控制并发操作时如何避免脏读、不可重复读和幻读的关键。Spring支持四种标准的SQL事务隔离级别: 1. READ_UNCOMMITTED(未提交读):最低级别的隔离,可能会出现脏读、不可重复读和幻读。在大多数情况...

    数据库的隔离级别介绍

    可重复读取级别进一步防止了不可重复读,事务在执行期间可以看到自己开始时的数据视图,即使其他事务在此期间对数据进行了修改。然而,幻影读问题仍可能发生,即两次查询可能返回不同的行集合,因为其他事务插入了...

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

    在并发事务处理过程中,可能会出现更新丢失、脏读、不可重复读和幻读等问题。这些问题都是由于多事务并发执行引起的,需要通过事务隔离机制和锁机制来解决。 事务隔离级别 数据库的事务隔离级别是用来解决读一致性...

    Spring声明式数据库事务的使用-隔离级别

    Spring声明式数据库事务的使用,特别是隔离级别,是确保数据一致性与并发控制的关键技术。在高并发的互联网环境中,如商品库存管理,多个线程同时处理数据可能导致数据不一致,出现丢失更新问题。为此,数据库引入了...

    数据库_事务隔离级别与锁.docx

    ### 数据库事务隔离级别与锁 #### 一、事务的基本特征 事务是数据库管理系统的核心概念之一,用于确保数据的一致性和正确性。事务通常具备以下四个特性,即ACID特性: 1. **原子性(Atomicity)**:事务被视为一...

    脏读不可重复读幻影读

    ### 脏读、不可重复读与幻读详解 #### 一、概念解析 在数据库管理系统(DBMS)中,为了确保数据的一致性和完整性,引入了事务(Transaction)的概念。事务通常具备四个特性:原子性(Atomicity)、一致性(Consistency)、...

Global site tag (gtag.js) - Google Analytics