`
lt200819
  • 浏览: 188157 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据库事务隔离级别与封锁协议

 
阅读更多

一、事务的4个基本特征 

1、原子性 (Atomicity ) 

     要么全执行,要么都不执行。

2、一致性( Consistency ) 

     事务在系统完整性中实施一致性,这通过保证系统的任何事务最后都处于有效状态来实现。

3、隔离性 ( Isolation)

     在隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。

4、持久性 (Durabilily) 

     持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的。

二、为什么需要对事务并发控制

如果不对事务进行并发控制,我们看看数据库并发操作是会有那些异常情形 
1、丢失更新(Lost update) 
    两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修改都失效了。 
2、脏读(Dirty Reads) 
    一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交。这是相当危险的,因为很可能所有的操作都被回滚。 
3、非重复读(Non-repeatable Reads) 
   一个事务对同一行数据重复读取两次,但是却得到了不同的结果。同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。 
4、二类丢失更新(Second lost updates problem) 
    无法重复读取的特例。有两个并发事务同时读取同一行数据,然后其中一个对它进行修改提交,而另一个也进行了修改提交。这就会造成第一次写操作失效。 
5、幻像读(Phantom Reads) 
    事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查 

 

三、数据库的隔离级别 
   为了兼顾并发效率和异常控制,在标准SQL规范中,定义了4个事务隔离级别,(ORACLE和SQLSERER对标准隔离级别有不同的实现 ) 
1、未提交读(Read Uncommitted) 
    直译就是"读未提交",意思就是即使一个更新语句没有提交,但是别 
的事务可以读到这个改变.这是很不安全的。允许任务读取数据库中未提交的数据更改,也称为脏读。 
2、提交读(Read Committed) 
   直译就是"读提交",可防止脏读,意思就是语句提交以后即执行了COMMIT以后 
别的事务就能读到这个改变. 只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 
3、可重复读(Repeatable Read): 
   直译就是"可以重复读",这是说在同一个事务里面先后执行同一个查询语句的时候,得到的结果是一样的.在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读 
4、串行读(Serializable) 
   直译就是"序列化",意思是说这个事务执行的时候不允许别的事务并发执行. 完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

 

四,隔离级别对并发的控制 
下表是各隔离级别对各种异常的控制能力。

  LU丢失更新 DR脏读 NRR非重复读 SLU二类丢失更新 PR幻像读
未提交读 RU Y Y Y Y Y
提交读 RC N N Y Y Y
可重复读 RR N N N N Y
串行读 S N N N N N

 

五、并发一致性问题的解决办法 
1 封锁(Locking) 
    封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该 数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。 基本的封锁类型有两种:排它锁(Exclusive locks 简记为X锁)和共享锁(Share locks 简记为S锁)。 
    排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其它事务在T释放A上的锁之前不能再读取和修改A。 
    共享锁又称为读锁。若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其它事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 
2 封锁协议 
    在 运用X锁和S锁这两种基本封锁,对数据对象加锁时,还需要约定一些规则,例如应何时申请X锁或S锁、持锁时间、何时释放等。我们称这些规则为封锁协议 (Locking Protocol)。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。下面介绍三级封锁协议。三级封锁协议分别在不同程度上解决了丢失的修改、不 可重复读和读"脏"数据等不一致性问题,为并发操作的正确调度提供一定的保证。下面只给出三级封锁协议的定义,不再做过多探讨。 
    1 级封锁协议是:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。 1级封锁协议可防止丢失修改,并保证事务T是可恢复的。在1级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不 读"脏"数据。 
    2级封锁协议是:1级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。2级封锁协议除防止了丢失修改,还可进一步防止读"脏"数据。 
    3级封锁协议是:1级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。3级封锁协议除防止了丢失修改和不读'脏'数据外,还进一步防止了不可重复读。 
六、一般处理并发问题时的步骤: 
1、开启事务。 
2、申请写权限,也就是给对象(表或记录)加锁。 
3、假如失败,则结束事务,过一会重试。 
4、假如成功,也就是给对象加锁成功,防止其他用户再用同样的方式打开。 
5、进行编辑操作。 
6、写入所进行的编辑结果。 
7、假如写入成功,则提交事务,完成操作。 
8、假如写入失败,则回滚事务,取消提交。 
9、(7.8)两步操作已释放了锁定的对象,恢复到操作前的状态。

 

分享到:
评论

相关推荐

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

    SQL Server中事务隔离级别和封锁机制是数据库管理系统中两个重要的概念,它们决定了事务之间的并发执行和数据的一致性。根据不同的应用场景,选择适合的事务隔离级别和封锁机制,可以确保数据的一致性和隔离性,提高...

    数据库事务的四大特征以及隔离级别

    隔离性(Isolation):并发的事务是相互隔离的,即一个事务内部的操作及正在操作的数据必须封锁起来,不能被其他企图修改的事务看到。 隔离性可以通过不一样的配置达到不一样的隔离级别。 持久性(Durability):...

    数据库事务PPT课件.ppt

    本资源是关于数据库事务的PPT课件,主要讲解了数据库事务的概念、事务的性质、事务故障、系统故障和介质故障的恢复技术与原理、Redo & Undo、并发控制技术、封锁、封锁协议、活锁和死锁、并发调度的可串行性、两段锁...

    数据库事务管理数据库事务管理.ppt

    总的来说,数据库事务管理涉及事务的定义、状态管理、ACID特性的实现以及并发控制策略,如封锁协议,这些都是保证数据库在多用户环境下的正确性和可靠性的核心组成部分。通过精细的事务管理和有效的并发控制,数据库...

    软考系分之数据库事务并发与事务加锁

    ### 数据库事务并发与事务加锁 #### 一、数据库事务基本概念 在数据库领域,事务(Transaction)是由一系列操作组成的逻辑工作单元。事务具备四个关键特性:原子性(Atomicity)、一致性(Consistency)、隔离性...

    数据库系统原理第8章数据库事务管理.ppt

    数据库事务管理是数据库系统中确保数据一致性的重要机制。在第8章中,主要讨论了事务的概念、特性以及并发控制的相关内容。 首先,事务是数据库处理的逻辑单元,它由一系列数据库操作(如插入、删除、修改和检索)...

    数据库系统原理:BDB7 数据库事务管理.ppt

    总的来说,数据库事务管理是确保数据库正确运行和数据完整性的基石,涉及到事务的概念、调度、并发控制、封锁协议、故障恢复策略等多个重要方面。理解和掌握这些知识点对于数据库设计和管理至关重要。

    数据库事务管理教学课程.pptx

    数据库事务管理是数据库系统中确保数据一致性、完整性和并发控制的关键机制。本章主要涵盖了四个主要知识点:事务的概念与特性、可串行性理论、事务的基本操作与活动状态以及SQL对事务的支持,以及并发控制与封锁...

    数据库事务处理1

    不同的锁协议如0级协议、1级协议、2级协议和3级协议分别对应不同的并发控制级别。封锁粒度是指锁定的数据对象大小,粒度越大,并发度越小,但封锁开销也相应减少。 此外,还有基于时间戳的并发控制,通过时间戳确定...

    数据库锁和数据库隔离级别

    近突然发现忘了数据库锁和数据库隔离级别,时常弄混它们之间的关系。为此特此写下此博客,以方便自己复习,同时也可以帮助博友。  数据库锁  数据库锁是事务T在对某个数据对象(例如表、记录等)操作之前,先向...

    数据库事务管理-PPT课件.ppt

    为了解决这类问题,DBMS通常会使用不同程度的锁定策略,如读锁(共享锁)和写锁(排他锁),以及不同的事务隔离级别,如读未提交、读已提交、可重复读和串行化,以平衡并发性能和数据一致性。 综上所述,数据库事务...

    《数据库原理》并发操作、串行调度

    这些不一致性都是由于并发操作破坏了事务的隔离性所引起的。 三、封锁类型 封锁是指一个事务对某个数据对象加锁,取得对它一定的控制,限制其他事务对该数据对象的使用。基本的封锁类型有两种:排它锁(X 锁)和...

    数据库系统原理-08(数据库事务).ppt

    数据库事务是数据库系统中至关重要的概念,用于确保数据的一致性和完整性。事务是用户定义的一系列数据库操作,这些操作被视为单个逻辑单元,要么全部执行,要么全部不执行,这称为原子性。事务的目的是防止数据库中...

    MySQL的Innodb中的事务隔离级别和锁的关系

    根据业务场景和并发需求,合理设置事务隔离级别,以及使用一次性封锁法或两段锁协议,可以有效地平衡数据一致性和并发性能。对于避免死锁,可以通过设置合理的事务超时、回滚事务以及使用死锁检测机制来解决。

    [数据库原理]事务分析(自用笔记)

    根据提供的标题、描述以及部分内文,我们可以提炼出与数据库事务处理相关的几个核心知识点: ### 数据库事务基础知识 #### 1. 事务的概念 - **定义**:事务是作为一个单元执行的一系列操作。这些操作要么全部成功...

    数据库事务管理...ppt

    【数据库事务管理】 数据库事务管理是数据库系统中确保数据一致性和完整性的核心机制。它涉及到多用户环境下数据库的并发操作,以及在系统故障时的数据恢复。以下是对事务管理的详细解释: 1. **事务的引入**: ...

Global site tag (gtag.js) - Google Analytics