`
小张三
  • 浏览: 67817 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

事务隔离机制(转载)

阅读更多

    数据库并发操作存在的异常情况:

  1. 更新丢失(Lost update):两个事务更新一行数据,但是第二事务却中途失败退出,导致对数据两个修改都失效了,这是系统没有执行任何锁操作,因此并发事务并没有被隔离开来
  2. 脏读取(Dirty Reads):一个事物开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交。这是相当危险,很可能所有操作都被回滚
  3. 不可重复读取(Non-repeatable Reads):一个事务对同一行数据重复读取两次,但是却得到了不同结果。例如在两次读取中途,有另外一个事务对该行数据进行了修改并提交
  4. 两次更新问题(Second lost updates problem):无法重复读取特例,有两个并发事务同时读取同一行数据,然后其中一个对它进行修改提交,而另一个也进行了修改提交,这就会造成第一次写操作失效
  5. 幻读(Plantom Reads):事务在操作过程中进行两次查询,第二次查询结果包含了第一次查询中未出现的数据,这是因为在两次查询过程中有另外一个事务插入数据造成的。

    为了避免上面的几种情况,在标准SQL规范中定义了4个事务隔离级别,不同隔离级别对事务处理不同:

  1. Read Uncommitted(未提交读):允许脏读取,但不允许更新丢失,如果一个事务已经开始写数据,则另外一个数据则不允许同时进行写操作,但允许其他事务读此行数据。此隔离级别可以通过“排他写锁”实现。事务隔离级别最低,仅可保证不读取物理损坏的数据。与Read Committed隔离级相反,它允许读取已经被其他用户修改但尚未提交确定的数据
  2. Read Committed(提交读):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现,读取数据的事务允许其他事务继续访问该行数据,但是未提交写事务将会禁止其他事务访问该行。SQL Server默认的级别。在此隔离级下,Select命令不会返回尚未提交的数据,也不能返回脏数据
  3. Repeatable Read(可重复读取):禁止不可重复读取和脏读取。但是有时可能出现幻影数据,这可能通过“共享读锁”和“排他写锁”实现,读取数据事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。在此隔离级别下,用Select命令读取的数据在整个命令执行过程中不会被更改。此选项会影响系统的效能,非必要情况最好不用此隔离级别
  4. Serializable(可串行读):提供严格的事务隔离,它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作事务访问到。事务隔离的最高级别,事务之间完全隔离。如果事务在可串行读隔离级别上运行,则可以保证任何并发重叠事务均是串行的。

隔离级别     更新丢失     脏读取     重复读取     幻读

未提交读        N                   Y               Y                Y

提交读            N                   N              Y                Y

可重复读        N                   N              N                Y

串行                N                   N              N                N

分享到:
评论

相关推荐

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

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

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

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

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

    了解并合理设置事务的传播特性和隔离级别对于构建健壮的事务处理机制至关重要。正确配置可以确保数据的一致性和完整性,同时避免不必要的资源消耗。在实际应用中,开发者应根据业务需求选择合适的事务策略,以平衡...

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

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

    MySQL事务隔离级别

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

    详解Mysql事务隔离级别与锁机制.doc

    详解Mysql事务隔离级别与锁机制 本篇文章详细介绍了Mysql事务隔离级别与锁机制的概念、原理和应用。事务隔离级别是数据库系统中的一种机制,用于解决多事务并发问题,包括脏写、不可重复读、幻读等问题。锁机制是...

    MySQL的四种事务隔离级别

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

    SQLSERVER快照隔离

    SQL Server 2005 中引入了快照隔离(Snapshot Isolation)机制,该机制可以提供非阻碍、非锁定的读取一致性,解决了传统的读取已提交(Read Committed)事务隔离级别下的争用问题。 快照隔离机制的核心思想是通过行...

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

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

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

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

    事务并发访问及隔离机制

    事务并发带来的坏处,以及通过设置事务隔离级别来处理

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

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

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

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

    数据库事务隔离级别

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

    spring事物的7大传播机制,5个隔离机制

    Spring提供了多种方式来管理和控制事务,其中一种重要的机制就是**事务的传播行为**。 #### 1. PROPAGATION_REQUIRED 如果当前没有事务,那么就新建一个事务;如果已经存在一个事务,就加入到这个事务中。这是最...

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

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

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

    事务隔离:每一个事务都有一个所谓的隔离级,它定义了用户彼此之间隔离和交互的程度。隔离性强制对事务进行某种程度的隔离,保证应用程序在事务中看到一致的数据。 MySQL提供了下面4种隔离级:序列化(SERIALIZABLE...

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

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

Global site tag (gtag.js) - Google Analytics