`
lt200819
  • 浏览: 182350 次
  • 性别: 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)两步操作已释放了锁定的对象,恢复到操作前的状态。

 

分享到:
评论

相关推荐

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

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

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

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

    java-数据库系统原理.docx

    并发访问问题 事务隔离级别 丢失修改 MySQL 所有事务隔离级别在数据库层面上均可避免 脏读 READ-COMMITTED 事务隔离级别以上可避免 不可重复读 REPEATABLE-READ 事务隔离级别以上可避免 幻读 SERIALIZABLE 事务隔离...

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

     我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所以...

    MySQL中Innodb的事务隔离级别和锁的关系的讲解教程

    我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所以对于...

    远程机登录数据库服务器的方法

    介绍远程机或客户机登录数据库服务器方法,可以用于学习和验证数据库中事务隔离级别及对并发控制的理解。验证表级封锁和行级封锁。

    分布式数据库系统-复习.doc

    简答题 分布式数据库系统的特点是什么 答:物理分布性:数据不是存放在一个站点上 逻辑整体性:是与分散式数据库系统的区别 站点自治性:是与多处理机的系统的区别 数据分布透明性 集中与自治相结合 存在适当的数据...

    数据库系统及应用课程总结.docx

    并发控制干扰问题、可串行性、封锁、死锁、隔离级别、封锁与隔离级别;恢复故障类型、备份类型、日志的概念、恢复模型、备份转储、还原。第九章为关系数据理论:函数依赖术语和符号;函数依赖的公理系统Amstrong公理...

    数据库并发控制.doc

    数据库是一个共享资源,可以提供多个用户使用。... 并发控制的单位――事务 事务是数据库的逻辑工作单位,它是用户定义的一组操作序列。一个事务可以是一组SQ L语句、一条SQL语句或整个程序。 事务的开始和

    数据库系统的特点.doc

    参照完整性规则: 若属性F是基本关系R的外码,它与基本关系S的主码K相 对应,则对于R中每个元组在F上的值必须为: * 或者取空值 * 或者等于S中某个元组的主码值 事务 事务是用户定义的一个数据库的操作序列,这些操...

    数据库系统概念复习总结.pdf

    8.3.2 范式 8.4 函数依赖理论 第⼗⼆章、事务管理 12.1 事务概念 12.2 事务的原⼦性和持久性 12.3 事务的隔离性 12.4 可串⾏化 12.5 可恢复性 12.6 并发控制 12.6.1 基于锁的协议 12.6.2 保证可串⾏性的封锁协议(两...

    数据库系统概论.pdf

    得 分 试题一 一、单项选择题 (本大题共20小题,每小题2分,共40分) 在每小题列出的四个备选项中只有一个是 符合题目要 求的,请将其代码... 以下( )封锁违反两段锁协议。 A. Slock A … Slock B … Xlock C ………

    数据库系统概论名词解释.doc

    事务: 事务是用户定义的一组对数据库中的数据的操作序列,是操作数据库的最小逻辑单位 ,具有原子性、一致性、隔离性和持续性(永久性)的特点 4. 数据安全性控制 数据库的安全性控制主要是防止对数据库的非法使用所...

    《数据库系统概论》知识点总结.docx

    在数据库管理系统中,事务的四个特性包括(原子性,一致性,隔离性,持续性); 3.在数据库理论中,用二维表结构表示的数据模型称为(关系模型); 4.在数据库系统结构中,用户使用的数据视图称为(外模式,也称子...

    [详细完整版]数据库填空题.doc

    在多个事务并发执行时,系统应保证与这些事务先后单独执行时的结果一样,这是 指事务的_隔离_性。 24.在SQL/CLI中,保存元组或参数的有关信息的是__描述记录__。 25.在面向对象技术中,对象联系图是描述面向对象_...

    数据库九(并发控制)

    保证事务的隔离性;保证数据库的一致性 并发操作带来数据不一致性: 丢失修改:两个事务同时读入同一个数据并修改,结果T2的提交破坏了T1提交的结果 不可重复读:事务T1读取数据后,事务T2执行更新操作,导致T1无法...

    数据库系统原理(含答案).doc

    数据库系统原理 自测题(2) 一、单项选择题 1.数据库物理存储方式的描述称为 【 B 】 A.外模式 B.内模式 C.概念模式 D.逻辑模式 2.在下面给出的内容中,不属于DBA职责的是 【 A 】 A.定义概念模式 B.修改...

    锁和死锁

    封锁就是一个事务可向系统提出请求,对被操作的数据加锁(Lock)。其他事务必须等到此事务解锁(Unlock)之后才能访问该数据。从而,在多个用户并发访问数据库时,确保不互相干扰。可锁定的单位是:行、页、表、盘区...

Global site tag (gtag.js) - Google Analytics