`

隔离级别理解

 
阅读更多

 

事务的隔离级别:

1 READ UNCOMMITED(未提交读 )   事务中的修改,在没有提交的时候,其他事务都是可以见的,

  会产生脏读数据(未提交的数据,如果事务回滚,则当前修改的数据就是错误的)

2 READ COMMITED(提交读):事务从开始到提交之前,所做的修改对其他的事务都是不可见的,

  会产生不可重复读(同一个事务中,由于修改导致两次查询结果可能不同)

3 REPEATABLE READ(可重复读):同一个事务中多次读取,查询结果是一样的,

  会产生幻读数据(一个事务在读取数据时候,另一个事务插入新数据,导致查询结果不一样)

4 SERIALIZABLE(可串行化):强制事务串行执行,

 

 

 一、理解事务的隔离级别(个人认为隔离级别就是数据的锁处理的):

为什么用事务:

  在程序执行curd的时候,需要保证一个操作的完整性,我们通常在这个过程中添加事务,保证全部执行或全部不执行

事务隔离级别问题:

  当多个事务并发执行的时候,需要处理好隔离级别,否则会产生脏读,幻读,不可重复读。

  随着隔离级别的升高,数据库的并发能力会变低。

 

二、隔离级别种类:

  定义的标准隔离级别有四种,从高到底依次为:可序列化(Serializable)、可重复读(Repeatable reads)、提交读(Read committed)、未提交读(Read uncommitted)。

 

一)未提交读(Read uncommitted):

    表现:一个事务中更新数据未提交,在另一个事务中可以查询到这个未提交的数据,

    问题:一旦回滚则会出现数据不一致的问题,这种就是(脏读即数据还是没有用的数据)。

    锁情况:更新的数据时候会添加 排它锁,但查询数据并没有添加任何锁。

  1) 更改数据隔离级别为未提交读,然后更新不提交,执行查询
 SELECT @@tx_isolation;
 SELECT @@session.tx_isolation; 

 SET SESSION  TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  ;
 START TRANSACTION;  
    update  account_balance  set balance=3 where account_id=1; 
    --更新数据不提交
 COMMIT;   
 SET SESSION  TRANSACTION ISOLATION LEVEL REPEATABLE READ ; 


 2) 在另一个session中直接查询就可以查询未提交的数据 
  SELECT * FROM  account_balance  where account_id=1;

 

二)提交读(Read committed):

   表现:一个事务中,两次查询中间如果有更新操作,则两次查询出来的数据不一样,但可以解决脏读问题。

   问题:重复读(即重复读取一个数据结果不一样)

   锁:每次查询数据后立刻释放行锁。

 

 1)第一个session,执行查询条件,开启事务后,执行到第一个查询语句,然后执行更新 ,接着执行剩下的session,两次查询结果不一样。

 SET SESSION  TRANSACTION ISOLATION LEVEL  READ COMMITTED  ;
 START TRANSACTION;  
   SELECT * FROM  account_balance  where account_id=1;

   SELECT * FROM  account_balance  where account_id=1   LOCK IN SHARE MODE;
 COMMIT;   
 SET SESSION  TRANSACTION ISOLATION LEVEL REPEATABLE READ ; 


 2)执行更新操作
 SET SESSION  TRANSACTION ISOLATION LEVEL READ COMMITTED  ;
 START TRANSACTION;  
    update  account_balance  set balance=5 where account_id=1;   
 COMMIT;   

 SET SESSION  TRANSACTION ISOLATION LEVEL REPEATABLE READ ; 

 

 三)可重复读(Repeatable reads):可以解决重复读问题即解决两次查询结果不一样问题

  表现:一个事务中,两次查询结果一样

  问题:幻读(两次查询过程中,查询结果集中间插入一条数据,则即使查询事务没结束也能查询出来,两次查询结果集的结果不一样,就像幻想一样)

  锁:查询的结果集中,会对结果集添加行级共享锁,事务结束才会释放。

 

  1)第一次查询不添加任何锁,然后执行2中的插入,提交后,在执行第二个查询,会多出来一条数据,这是幻读
 SET SESSION  TRANSACTION ISOLATION LEVEL   REPEATABLE READ ;
 START TRANSACTION;  
   SELECT * FROM  account_balance  where account_id>1;

   SELECT * FROM  account_balance  where account_id>1    LOCK IN SHARE MODE;
 COMMIT;   
 SET SESSION  TRANSACTION ISOLATION LEVEL REPEATABLE READ ; 
  
   2) 查询第一个后插入数据:
 SET SESSION  TRANSACTION ISOLATION LEVEL REPEATABLE READ  ;
 START TRANSACTION;   
     insert  into account_balance values( 3,200)
 COMMIT;   
 SET SESSION  TRANSACTION ISOLATION LEVEL REPEATABLE READ ; 

 

四)可序列化(Serializable)

  产生幻读的原因是事务一在进行范围查询的时候没有增加范围锁(range-locks:给SELECT 的查询中使用一个“WHERE”子句描述范围加锁),

  所以导致幻读。

  锁:事务在读取数据时,必须先对其加 表级共享锁 ,直到事务结束才释放;

      事务在更新数据时,必须先对其加 表级排他锁 ,直到事务结束才释放。

 

五)锁机制:

锁类型:悲观锁、乐观锁

乐观锁:表中添加版本号实现

悲观锁:数据库自带包括表的锁和行级别的锁(共享所和排它锁)

 

 

 

 

 

 

 

分享到:
评论

相关推荐

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

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

    MySQL事务隔离级别

    总结起来,理解并合理设置MySQL的事务隔离级别对于确保数据库系统的稳定性和正确性至关重要。开发者需要根据业务场景,权衡并发性能与数据一致性,选择最合适的事务隔离级别。同时,深入学习MySQL的源码和工具可以...

    数据库的隔离级别介绍

    数据库的隔离级别是数据库管理系统(DBMS)在处理并发事务时确保数据一致性的重要机制。它主要解决了并发操作中可能...在设计数据库系统和应用程序时,理解这些隔离级别及其可能产生的效果至关重要,以便做出最佳决策。

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

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

    ORACLE的隔离级别

    ### ORACLE的隔离级别 #### 一、概念理解 **隔离级别**定义了事务与事务之间的隔离程度。在多用户环境中,多个事务并发执行时,可能会出现一些问题,如更新丢失、脏读、非重复读和幻像读等。为了减少这些问题的...

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

    本研究为中国工程物理研究院工学院的课题研究提供了参考和指导,通过对SQL Server事务隔离级别的实验研究,有助于理解和掌握多用户并发数据库系统中的事务隔离机制,为数据库设计和应用开发提供了科学依据。...

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

    总之,SQL Server的锁和事务隔离级别是数据库管理中的核心概念,理解和熟练运用它们可以帮助开发者设计出高效且一致的数据库应用。在实际操作中,应根据业务需求和并发场景来合理选择和调整这些设置,以达到最佳的...

    图文解释mysql的四个事务隔离级别

    之前在网上查询mysql事务隔离相关资料,一直只是脑子里有一个印象,久而久之还是会忘记,忘记后又要到网上查找相关资料,但是没实践过就对mysql事务隔离级别理解不是特别的深入,现在自己亲手实践体验一下这个这四个...

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

    为了理解这些隔离级别是如何工作的,有必要了解它们各自解决的并发问题: - 脏读(Dirty Read):一个事务读取到了另一个事务未提交的数据。 - 不可重复读(Non-Repeatable Read):一个事务在两次读取同一数据的...

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

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

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

    "深入理解Mysql事务隔离级别与锁机制" 事务隔离级别是数据库系统中的一种机制,用于解决多事务并发问题,使得事务之间的执行不受影响。这种机制可以分为四个级别:Read Uncommitted、Read Committed、Repeatable ...

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

    理解和合理应用 Spring 的事务传播特性和事务隔离级别对于开发高质量的企业级应用至关重要。通过选择合适的传播特性和隔离级别,可以有效地控制事务的行为,从而确保数据的一致性和系统的稳定性。开发者应该根据具体...

    深入解析MySQL的隔离级别配置及其影响.rar

    在数据库管理系统中,事务的隔离级别是确保数据...本文通过深入分析MySQL的隔离级别及其配置方法,提供了全面的指导,帮助数据库管理员和开发者理解隔离级别的概念,掌握配置技巧,并根据实际应用需求做出合理的选择。

    spring的隔离级别

    理解并合理运用`@Transactional`注解及其事务隔离级别是确保Spring应用中数据库操作正确性的关键,也是优化系统性能的重要手段。在实际开发中,应根据业务需求和并发场景,选择适当的隔离级别,并结合其他的事务属性...

    事务隔离级别 .pdf

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

    深入理解Mysql事务隔离级别与锁机制.zip

    总的来说,深入理解MySQL的事务隔离级别和锁机制对于优化数据库性能、保证数据一致性以及解决并发问题具有重要意义。通过灵活运用这些知识,我们可以更好地设计和维护数据库系统,确保其稳定、高效地运行。

    事务隔离级别 .docx

    在教学过程中,采用分析法、讨论法和演示法,可以帮助学生更好地理解和掌握事务隔离级别的概念和实际应用。通过实例演示设置和查看事务隔离级别,以及讨论并发问题的解决策略,可以加深学生对这一关键数据库概念的...

    深入理解Mysql锁与事务隔离级别1

    《深入理解MySQL锁与事务隔离级别》 在数据库管理中,锁和事务隔离级别是确保数据一致性与并发控制的重要概念。本文将详细阐述MySQL中的锁机制以及事务的四种隔离级别,以帮助读者更好地理解和应用这些关键概念。 ...

    oracle隔离级别

    Oracle数据库的隔离级别是确保多用户环境下数据一致性、避免并发问题的关键机制。隔离级别定义了不同事务在执行过程中如何处理数据的可见性和并发操作。根据ANSI/ISO SQL92标准,有四种主要的隔离级别: 1. **未...

Global site tag (gtag.js) - Google Analytics