- 1、本文档共51页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章数据库系统的恢复和并发控制 7 并发控制与封锁 7.1 数据库并发性的含义 上一章讨论的完整性是保证各个事务本身能得到正确的数据,只考虑一个用户使用数据库的情况,但实际上数据库中有许多用户。 每个用户在存取数据库中的数据时,可能是串行执行,即每个时刻只有一个用户程序运行,也可能是多个用户并行地存取数据库。 数据库的最大特点之一就是数据资源是共享的,串行执行意味着一个用户在运行程序时,其他用户程序必须等到这个用户程序结束才能对数据库进行存取,这样如果一个用户程序涉及大量数据的输入/输出交换,则数据库系统的大部分时间将处于闲置状态。 因此,为了充分利用数据库资源,很多时候数据库用户都是对数据库系统并行存取数据,这样就会发生多个用户并发存取同一数据块的情况,如果对并发操作不加控制可能会产生不正确的数据,破坏数据的完整性,并发控制就是解决这类问题,以保持数据库中数据的一致性。 7.2 事务(Transaction) 7.2.1 事务的定义 DBMS的并发控制是以事务为基本单位进行的。 那么到底什么是事务呢? 事务是数据库系统中执行的一个工作单位,它是由用户定义的一组操作序列。 一个事务可以是一组SQL语句、一条SQL语句或整个程序,一个应用程序可以包括多个事务。 事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由DBMS按照缺省规定自动划分事务。在SQL语言中,定义事务的语句有三条: BEGIN TRANSACTION COMMIT ROLLBACK BEGIN TRANSACTION表示事务的开始; COMMIT表示事务的提交,即将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,此时事务正常结束; ROLLBACK表示事务的回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的更新操作全部撤销,再回滚到事务开始时的状态。 7.2.2 事务的特征 事务是由有限的数据库操作序列组成,但并不是任意的数据库操作序列都能成为事务,为了保护数据的完整性,一般要求事务具有以下四个特征: 1.原子性(Atomic) 一个事务是一个不可分割的工作单位,事务在执行时,应该遵守“要么不做,要么全做”(nothing or all)的原则,即不允许事务部分的完成。 即使因为故障而使事务未能完成,它执行的部分结果要被取消。 2.一致性(Consistency) 事务对数据库的作用是数据库从一个一致状态转变到另一个一致状态。 所谓数据库的一致状态是指数据库中的数据满足完整性约束。 例如,银行企业中,“从帐号A转移资金额R到帐号B”是一个典型的事务,这个事务包括两个操作,从帐号A中减去资金额R和在帐号B中增加资金额R,如果只执行其中一个操作,则数据库处于不一致状态,帐务会出现问题。也就是说,两个操作要么全做,要么全不做,否则就不能成为事务。 可见事务的一致性与原子性是密切相关的。 3.隔离性(Isolation) 如果多个事务并发地执行,应像各个事务独立执行一样,一个事务的执行不能被其他事务干扰。 即一个事务内部的操作及使用的数据对并发的其他事务是隔离的。 并发控制就是为了保证事务间的隔离性。 4.持久性(Durability) 指一个事务一旦提交,它对数据库中数据的改变就应该是持久的,即使数据库因故障而受到破坏,DBMS也应该能够恢复。 事务上述四个性质的英文术语的第一个字母为ACID。因此,这四个性质以称为事务的ACID准则。 下面是一个事务的例子,从帐号A转移资金额R到帐号B: BEGIN TRANSACTION READ A A←A-R IF A0 /* A 款不足*/ THEN BEGIN DISPLAY “A款不足” ROLLBACK END ELSE /* 拨款 */ BEGIN B←B+R DISPLAY “拨款完成” COMMIT END 这是对一个简单事务的完整的描述。 该事务有两个出口: 当A 帐号的款项不足时,事务以ROLLBACK(撤销)命令结束,即撤销该事务的影响; 另一个出口是以COMMIT(提交)命令结束,完成从帐号A到帐号B的拨款。 在COMMIT之前,即在数据库修改过程中,数据可能是不一致的,事务本身也可能被撤销。 只有在COMMIT之后,事务对数据库所产生的变化才对其他事务开放,这就可以避免其他事务访问不一致或不存在的数据。 7.3 并发操作与数据的不一致性 当同一数据库系统中有多个事务并发运行时,如果不加以适当控制,可能产生数据
文档评论(0)