《触发器事务并发控制优秀课件.ppt》由会员分享,可在线阅读,更多相关《触发器事务并发控制优秀课件.ppt(75页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、触发器事务并发控制第1页,本讲稿共75页n6.1 系统目录系统目录n6.2 触发器触发器n6.3 事务事务n6.4 并发控制并发控制n6.5 数据库的恢复数据库的恢复主要内容主要内容2第2页,本讲稿共75页重、难点n重点n触发器n事务n难点n触发器3第3页,本讲稿共75页6.1系统目录系统目录nSQL Server 系统目录的核心是一个视图集,这些视图显示了描述 SQL Server 实例中的对象的元数据。n元数据是描述系统中对象属性的数据。n比如:n数据库中表和视图的数目和名称。n表或视图中的列数以及每一列的名称、数据类型、小数位数和精度。n表中定义的约束。n为表定义的索引和键。n等4第4页
2、,本讲稿共75页查询查询 SQL Server 系统目录系统目录n基于 SQL Server 的应用程序可以使用以下方式访问系统目录中的信息:n目录视图。建议使用这种访问方法。nSelect*from sys.tablesn信息架构视图。nselect*from INFORMATION_SCHEMA.TABLESnOLE DB 架构行集。nODBC 目录函数。n系统存储过程和函数。5第5页,本讲稿共75页系统存储过程n定义了返回目录信息的服务器系统存储过程nsp_databasesnsp_tables nsp_helpdb 报告有关指定数据库或所有数据库的信息。6第6页,本讲稿共75页系统函数
3、n系统函数可以访问 SQL Server 系统表中的信息,而不必直接访问系统表。nDB_ID()和 DB_NAME()nSUSER_ID 和 SUSER_NAME(或 SUSER_SID 和 SUSER_SNAME)n检索使用 SQL Server 身份验证登录的当前用户的用户名:nSELECT SUSER_NAME();7第7页,本讲稿共75页6.2触发器nSQL Server 提供两种主要机制来强制使用业务规则和数据完整性:约束和触发器。n触发器为特殊类型的存储过程,可在执行语言事件时自动生效。SQL Server 包括三种常规类型的触发器:nDML 触发器nDDL 触发器n登录触发器。8
4、第8页,本讲稿共75页nDML 触发器种类nAFTER触发器:要求只有执行某一操作INSERT、UPDATE、DELETE之后,触发器才被触发且只能在表上定义。nINSTEAD OF触发器:表示并不执行其所定义的操作INSERT、UPDATE、DELETE,而仅是执行触发器本身。对同一操作只能定义一个INSTEAD OF 触发器。9第9页,本讲稿共75页CREATE TRIGGERCREATE TRIGGER trigger_name trigger_name ONON tabletable|view view WITH ENCRYPTION WITH ENCRYPTION FOR|AFTER
5、|INSTEAD FOR|AFTER|INSTEAD OF OF INSERT ,INSERT ,UPDATE UPDATE ASASsql_statementsql_statement .n n 创建触发器时需指定:名称。定义触发器的表。触发器何时激发。激活触发器的数据修改语句。INSERT、UPDATE 或 DELETE。执行触发操作的编程语句。如果仅指定FOR关键字,则 AFTER 是默认设置。CREATE TRIGGER 必须是批处理中的第一条语句,并且只能应用到一个表中。10第10页,本讲稿共75页n触发器语句自动创建和管理两种特殊的表:n临时表deleted 表和 inserted
6、 表:测试数据修改的效果及设置触发器操作的条件;不能直接对表中的数据进行更改。nDeleted 表:存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。nInserted 表:存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。11第11页,本讲稿共75页例:n建立一个触发器,当向建立一个触发器,当向orders表中插入一个新订单时被触发,表中插入一
7、个新订单时被触发,自动更新自动更新products表的表的quantity列,即把在列,即把在orders表中指定的表中指定的qty从从products表相应行的表相应行的quantity中减去。中减去。nuse Salesngoncreate trigger ortri on orders for insert nasndeclare new_qty float,new_pid char(4)nselect new_qty=qty,new_pid=pid from insertednupdate products set quantity=quantity-new_qty where pid
8、=new_pid 12第12页,本讲稿共75页ninsert orders(ordno,aid,cid,pid,qty)values(1100,a01,c001,p01,2000)13第13页,本讲稿共75页6.3 事务事务n事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作。n这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行。n事务是一个不可分割的工作逻辑单元。14第14页,本讲稿共75页6.3 事务事务n为什么需要事务?n例如,银行转帐问题:假定资金从帐户A转到帐户B,至少需要两步:n帐户A的资金减少n然后帐户B的资金相应增加银行转帐帐户帐户A帐户帐户B15第
9、15页,本讲稿共75页6.3 事务事务nCREATE TABLE bank-创建帐户表,存放用户的帐户信息n(n customerName CHAR(10),-顾客姓名n currentMoney MONEY CHECK(currentMoney=1)n -根据银行规定,帐户余额不能少于1元,否则视为销户 n)nGOnINSERT INTO bank(customerName,currentMoney)n VALUES(张三,1000)nINSERT INTO bank(customerName,currentMoney)n VALUES(李四,1)16第16页,本讲稿共75页6.3 事务事务
10、n目前两个帐户的余额总和为:目前两个帐户的余额总和为:1000+1=1001元元SELECT*FROM bank17第17页,本讲稿共75页6.3 事务事务n模拟实现转帐模拟实现转帐:从张三的帐户转帐1000元到李四的帐户n-我们可能会这样编写语句nUPDATE bank SET currentMoney=currentMoney-1000 n WHERE customerName=张三nUPDATE bank SET currentMoney=currentMoney+1000 n WHERE customerName=李四nGOn-再次查看转帐后的结果。nSELECT*FROM bank1
11、8第18页,本讲稿共75页6.3 事务事务n张三的帐户没有减少 n但李四的帐户却多了1000元 n100010012001元 总额多出了1000元!如何解决这种问题?使用如何解决这种问题?使用事事务!务!19第19页,本讲稿共75页6.3 事务事务nT-SQL使用下列语句来管理事务:n开始事务:BEGIN TRANSACTIONn提交事务:COMMIT TRANSACTIONn回滚(撤销)事务:ROLLBACK TRANSACTIONn一旦事务提交或回滚,则事务结束。n判断某条语句执行是否出错:n使用全局变量ERROR;n如果前一个 Transact-SQL 语句执行没有错误,则返回 0。n如
12、果前一个语句遇到错误,则返回错误号。20第20页,本讲稿共75页6.3 事务事务n使用事务解决银行转帐问题nBEGIN TRANSACTION n/*-定义变量,用于累计事务执行过程中的错误-*/nDECLARE errorSum INT nSET errorSum=0 -初始化为0,即无错误n/*-转帐:张三的帐户少1000元,李四的帐户多1000元*/nUPDATE bank SET currentMoney=currentMoney-1000n WHERE customerName=张三nSET errorSum=errorSum+errornUPDATE bank SET curren
13、tMoney=currentMoney+1000n WHERE customerName=李四nSET errorSum=errorSum+error -累计是否有错误21第21页,本讲稿共75页6.3 事务事务nIF errorSum0 -如果有错误n BEGINn print 交易失败,回滚事务n ROLLBACK TRANSACTION n END nELSEn BEGINn print 交易成功,提交事务,写入硬盘,永久的保存n COMMIT TRANSACTION n ENDnGOnprint 查看转帐事务后的余额nSELECT*FROM bank nGO 22第22页,本讲稿共75
14、页6.3 事务事务n转账1000的结果:23第23页,本讲稿共75页6.3 事务事务n转账800的结果:24第24页,本讲稿共75页6.3 事务事务n-判断某条语句执行是否出错的另一种方法nBegin try-捕获事务执行过程中的错误,一旦有语句出错就转到catch中处理nBEGIN TRANSACTION nUPDATE bank SET currentMoney=currentMoney-1000n WHERE customerName=张三 nUPDATE bank SET currentMoney=currentMoney+1000n WHERE customerName=李四ncom
15、mit transaction-上面的语句都没有出错,则提交事务nend try nbegin catchnprint 有错误发生,回滚事务nrollback transactionnend catchnselect*from bank25第25页,本讲稿共75页6.3 事务事务事务的分类:n显式事务:用BEGIN TRANSACTION明确指定事务的开始,这是最常用的事务类型n隐性事务:通过SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开,在发出 COMMIT 或 ROLLBACK 语句之前,该事务将一直保持有效。n自动提交事务:这是 SQL Serv
16、er 的默认模式,它将每条单独的 T-SQL 语句视为一个事务,如果成功执行,则自动提交;如果错误,则自动回滚26第26页,本讲稿共75页6.3 事务事务n事务的ACID特性n原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行。n一致性(Consistency):当事务完成时,数据必须处于一致状态。n隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。n永久性(Durability):事务完成后,它对数据库的修改被永久保持。27第27页,本讲稿共75页
17、6.46.4并发控制并发控制n6.4.16.4.1并发操作引起的异常并发操作引起的异常n丢失更新(LostUpdate)n未提交读(Uncommittedread),也称为“脏读”n不可重复读(Nonrepeatableread)n幻象读(Phantomread)28第28页,本讲稿共75页丢失更新(LostUpdate)T1读读A=16A=A-1写回写回A15T2读读A=16A=A-2写回写回A1429第29页,本讲稿共75页未提交读(脏读)n事务T1 修改了某数据并写回,事务T2 读取了同一数据后,T1由于某种原因被撤销,被修改的值复原,此时T2读到的数据与数据库中的数据不一致T1读读C=
18、1C=C*2写回写回C=2ROLLBACKC恢复为恢复为1T2读读C=230第30页,本讲稿共75页不可重复读n事务T1读取某一数据后,事务T2对其做了修改,当T1按同样条件再读时得到不同的值。T1读读A=1,B=2求求A+B=3读读A=1,B=4求求A+B=5T2读读B=2B=B*2写回写回B=431第31页,本讲稿共75页幻象读n事务T1读取某些数据后,事务T2插入了一些记录,当T1按同样条件再读时发现多了一些记录。32第32页,本讲稿共75页6.46.4并发控制并发控制n6.4.2并发控制机制:是衡量DBMS系统性能的指标之一n并发控制机制的任务n对并发操作进行正确调度n保证事务的隔离性
19、n保证数据库的一致性n封锁技术(Locking)是并发控制的主要技术33第33页,本讲稿共75页6.4.3封锁n事务T在对某个数据对象(如数据库、表、记录等)操作之前,首先向系统发出加锁请求以便获得对数据对象相应的控制;n在事务T释放它所获得的锁之前,其他事务不能更新此数据对象。34第34页,本讲稿共75页锁的类型n排它锁(eXclusive lock):写锁n若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁n共享锁(Share lock):读锁n若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁
20、,而不能加X锁,直到T释放A上的S锁35第35页,本讲稿共75页锁的相容矩阵nY:相容的请求nN:不相容的请求T2 T1XS-XNNYSNYY-YYY36第36页,本讲稿共75页封锁协议有了两种基本封锁,还需要什么约定?封锁协议的概念何时申请加锁、持锁时间、何时释放等规则不同的封锁协议所达到的系统一致性不同37第37页,本讲稿共75页三个级别的封锁协议n一级封锁协议n内容:事务T在修改数据R之前必须先对其加X 锁,直至事务结束n事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)n评价:是否可解决n丢失修改?n可重复读?n读脏数据?n在协议中,如果是读数据,不需要加锁,所以不能
21、保证可重复读和不读“脏”数据。可防止可防止不能保证不能保证不能防止不能防止38第38页,本讲稿共75页一级封锁协议Xlock A等待等待等待等待获得Xlock A读A=15AA-1写回A=14CommitUnlock A Xlock A 获得 读A=16AA-1 写回A=15 Commit Unlock AT2T1没有丢失修改没有丢失修改39第39页,本讲稿共75页一级封锁协议读A=15 Xlock A 获得 读A=16 AA-1 写回A=15 RollbackUnlock AT2T1读读“脏脏”数据数据40第40页,本讲稿共75页 Xlock B 获得 读B=100 BB*2 写回B=200
22、 Commit Unlock B读A=50 读B=100 求和=150读A=50 读B=200 求和=250 (验算不对)T2T1不可重复读不可重复读一级封锁协议41第41页,本讲稿共75页三个级别的封锁协议n二级封锁协议n内容:n读数据前加S锁,读完即释放n写数据前加X 锁直至事务结束n评价:是否可解决n丢失修改?n可重复读?n读脏数据?可防止可防止不能保证不能保证可防止可防止42第42页,本讲稿共75页二级封锁协议不可重复读不可重复读Sclock A 获得 读A=50 Unlock A Sclock B 获得 读B=100 Unlock B 求和=150 Xlock B等待等待获得Xloc
23、k B读B=100BB*2写回B=200CommitUnlock BT2T1Sclock A 获得 读A=50 Unlock A Sclock B 获得 读B=200 Unlock B 求和=250 (验算不对)T2T1(续)43第43页,本讲稿共75页三个级别的封锁协议n三级封锁协议n内容:n读数据前加S锁直至事务结束n写数据前加X 锁直至事务结束n评价:是否可解决n丢失修改?n可重复读?n读脏数据?可防止可防止能保证能保证可保证可保证44第44页,本讲稿共75页三级封锁协议Xlock B等待等待等待 等待等待等待等待等待获得Xlock B读B=100BB*2写回B=200CommitUnl
24、ock B Slock A 读A=50 Slock B 读B=100 求和=150 读A=50 读B=100 求和=150 Commit Unlock A Unlock B T2T1可重复读可重复读45第45页,本讲稿共75页三级封锁协议Slock C等待等待等待等待获得Slock C读C=100Commit CUnlock C Xlock C 读C=100 CC*2 写回C=200 ROLLBACK (C恢复为100)Unlock C T2T1不读不读“脏脏”数据数据46第46页,本讲稿共75页不同级别的封锁协议X锁S锁一致性保证操作结束释放事务结束释放操作结束释放事务结束释放不丢失修改不读
25、脏数据可重复性一级二级三级47第47页,本讲稿共75页n死锁n事务T1和T2各自封锁了数据R1和R2后,又各自请求封锁R2和R1,因都无法获得而等待对方释放的现象n解决的两类方法n预防死锁n死锁的诊断与解除6.4.4 死锁48第48页,本讲稿共75页死锁的预防n一次封锁法n办法:每个事务一次将所有要使用的数据全部加锁n存在问题?降低并发度n顺序封锁法n办法:预先规定数据对象的封锁顺序,所有事务均按此顺序n存在问题?维护成本高v因此DBMS普遍采用诊断并解除死锁的办法49第49页,本讲稿共75页死锁的诊断与解决n死锁的诊断n超时法n办法:等待时间超过规定的时限n优点:实现简单n缺点n有可能误判死
26、锁n时限若设置得太长,死锁发生后不能及时发现n等待图法n办法:画等待图,发现回路50第50页,本讲稿共75页等待图法n用事务等待图动态反映所有事务的等待情况n事务等待图是一个有向图G=(T,U)nT为结点的集合,每个结点表示正运行的事务nU为边的集合,每条边表示事务等待的情况n若T1等待T2,则T1,T2之间划一条有向边,从T1指向T2n并发控制子系统周期性地(比如每隔1 min)检测事务等待图,如果发现图中存在回路,则表示系统中出现了死锁。51第51页,本讲稿共75页n死锁的解决n检测到死锁,选择一个处理死锁代价最小的事务,强行撤销,使其它事务可以继续下去n恢复撤销事务所执行的数据修改操作5
27、2第52页,本讲稿共75页6.4.5 事务调度的可串行性nDBMS需对多个并发事务进行运行调度n能将所有事务串行起来的调度策略不会破坏数据库的不一致性,故而总是正确的n可串行化(Serializable)的调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同53第53页,本讲稿共75页6.4.5事务调度的可串行性n可串行性是并发事务操作是否正确的判别准则。例:现在有两个事务,分别包含下列操作:事务1:读B;A=B+1;写回A;事务2:读A;B=A+1;写回B;假设A的初值为2,B的初值为2。54第54页,本讲稿共75页6.4.5事务调度的可串行性n对这两个事务
28、的不同调度策略n串行执行n串行调度策略1n串行调度策略2n交错执行n不可串行化的调度n可串行化的调度55第55页,本讲稿共75页(a)串行调度策略,正确的调度SlockBY=B=2UnlockBXlockAA=Y+1写回写回A(=3)UnlockASlockAX=A=3UnlockAXlockBB=X+1写回写回B(=4)UnlockBT1T256第56页,本讲稿共75页(b)串行调度策略,正确的调度 SlockBY=B=3UnlockBXlockAA=Y+1写回写回A(=4)UnlockASlockAX=A=2UnlockAXlockBB=X+1写回写回B(=3)UnlockBT1T257第
29、57页,本讲稿共75页(c)不可串行化的调度SlockBY=B=2UnlockBXlockAA=Y+1写回写回A(=3)UnlockASlockAX=A=2UnlockAXlockBB=X+1写回写回B(=3)UnlockBT1T2由于其执行结果与(a)、(b)的结果都不同,所以是错误的调度。58第58页,本讲稿共75页(d)可串行化的调度SlockBY=B=2UnlockBXlockAA=Y+1写回写回A(=3)UnlockASlockA等待等待等待等待等待等待X=A=3UnlockAXlockBB=X+1写回写回B(=4)UnlockBT1T2n由于其执行结果与串行调度(a)的执行结果相同
30、,所以是正确的调度。59第59页,本讲稿共75页n为了保证并发操作的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化的n保证事务调度可串行性的策略n两段锁(Two-Phase Locking,2PL)协议6.4.5 事务调度的可串行性60第60页,本讲稿共75页两段锁协议n两段锁协议的内容1.在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁2.在释放一个封锁之后,事务不再获得任何其他封锁n事务对数据项的加锁和解锁分为两个阶段完成n获得封锁:在对数据读写之前首先申请并获得封锁;n释放封锁:在释放一个封锁后不再申请和获得任何其他封锁61第61页,本讲稿共75页两段锁
31、协议例:事务1的封锁序列:Slock A.Slock B.Xlock C.Unlock B.Unlock A.Unlock C;事务2的封锁序列:Slock A.Unlock A.Slock B.Xlock C.Unlock C.Unlock B;事务1遵守两段锁协议,而事务2不遵守两段协议。62第62页,本讲稿共75页两段锁协议的性质n两段锁协议是可串行化调度的充分条件,但不是必要条件n若并发事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的;n若对并发事务的一个调度是可串行化的,不一定所有事务都符合两段锁协议n两段锁协议可以保证并发事务的正确性,但可能发生死锁63第63页,
32、本讲稿共75页两段锁协议T1Slock B读B=2Y=BXlock AA=Y+1写回A=3Unlock BUnlock AT2SlockA等待等待等待等待等待等待等待等待等待等待SlockA读读A=3Y=AXlockBB=Y+1写回写回B=4UnlockBUnlockAT1SlockB读读B=2Y=BUnlockBXlockAA=Y+1写回写回A=3UnlockAT2SlockA等待等待等待等待等待等待等待等待SlockA读读A=3X=AUnlockAXlockBB=X+1写回写回B=4UnlockB(a)遵守两段锁协议遵守两段锁协议(b)不遵守两段锁协议不遵守两段锁协议T1SlockB读读B
33、=2Y=BUnlockBXlockAA=Y+1写回写回A=3UnlockAT2SlockA读读A=2X=AUnlockAXlockB等待等待XlockBB=X+1写回写回B=3UnlockB(c)不遵守两段锁协议不遵守两段锁协议64第64页,本讲稿共75页6.4.6封锁的粒度n封锁的粒度即封锁对象的大小,如n逻辑单元:属性、元组、关系、索引、数据库等n物理单元:页、块等n封锁粒度对并发控制的影响n封锁粒度越大,并发度越小,系统封锁开销越小;n封锁粒度越小,并发度越高,系统封锁开销越大;65第65页,本讲稿共75页6.4.7隔离级别隔离级别q隔离级别:定义一个事务必须与其他事务所进行的资源或数据
34、更改相隔离的程度。q较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。q应用程序要求的隔离级别确定了数据库使用的锁定行为。SET TRANSACTION ISOLATION LEVEL READ COMMITTED|READ UNCOMMITTED|REPEATABLE READ|SERIALIZABLE 66第66页,本讲稿共75页nREAD COMMITTEDn指定在读取数据时控制共享锁以避免脏读。nREAD UNCOMMITTEDn执行脏读,表示不发出共享锁,也不接受排它锁。nREPEATABLE READn锁定查询
35、中使用的所有数据以防止其他用户更新数据。对事务中的每个语句所读取的全部数据都设置了共享锁,并且该共享锁一直保持到事务完成为止。nSERIALIZABLEn在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。6.4.7隔离级别隔离级别67第67页,本讲稿共75页隔离级别隔离级别脏读脏读不可重复读取不可重复读取 幻像幻像未提交读未提交读是是是提交读提交读否是是可重复读可重复读否否是可串行读可串行读否否否68第68页,本讲稿共75页6.5 数据库的恢复数据库的恢复6.5.1 故障的种类故障的种类事务故障事务故障(1)逻辑错误。事务由于某些内部条件而无法继续正常执行,如
36、非法输入、找不到数据、运算溢出或超出资源限制。(2)系统错误。系统进入一种不良状态(如死锁),结果事务无法继续正常执行。系统故障系统故障 引起系统停止运转随之要求重新启动的事件称为“系统故障”。介质故障介质故障 介质故障指外存故障,系统在运行过程中,由于某种硬件故障,如磁盘损坏、磁 头碰撞或由于操作系统的某种潜在的错误、瞬时磁场干扰,使存储在外存上的数据部分损失或全部损失。计算机病毒计算机病毒69第69页,本讲稿共75页6.5 数据库的恢复数据库的恢复n6.5.2 故障恢复技术故障恢复技术n数据存储数据存储n数据转储也叫数据备份,是指DBA定期将整个数据库复制到磁带或另一个磁盘上保存起来的过程
37、。n日志文件日志文件n系统运行时,数据库与事务状态都在不断交化,为了在故障发生后能恢复系统的正常状态,必须在系统正常运行时随时记录下它们的变化情况,这种记录数据库的更新操作的文件称为日志文件。70第70页,本讲稿共75页6.5 数据库的恢复数据库的恢复nSQL Server 2008的备份的备份n完整数据库备份n差异数据库备份n事务日志备份nSQL Server 2008的恢复的恢复n简单恢复模式n完整恢复模式n大容量日志恢复模式n大容量日志恢复模式只应偶尔用于提高某些大规模大容量操作(如大量数据的大容量导入)的性能。71第71页,本讲稿共75页练习n1.解决并发操作带来的数据不一致问题普遍采
38、用()技术。nA.封锁 B.存取控制 C.恢复 D.协商n2.DBMS普遍采用()方法来保证调度的正确性。n A.索引 B.授权 C.封锁 D.日志 n3.事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放,这是()。nA.一级封锁协议 B.二级封锁协议 C.三级封锁协议 D.零级封锁协议 72第72页,本讲稿共75页练习n4.如果事务T获得了数据项Q上的排他锁,则T对Q()。nA.只能读不能写 B.只能写不能读 C.既可读又可写 D.不能读也不能写 n5.设事务T1和T2,对数据库中的数据A进行操作,可能有如下几种情况,请问哪一种不会发生冲突操作()。nA.T1正在写A,T2要读A
39、B.T1正在写A,T2也要写A C.T1正在读A,T2要写A D.T1正在读A,T2也要读A 73第73页,本讲稿共75页练习n6.如果有两个事务,同时对数据库中同一数据进行操作,不会引起冲突的操作是()。nA.一个是DELETE,一个是SELECT B.一个是SELECT,一个是DELETE C.两个都是UPDATE D.两个都是SELECT n7._可以防止丢失修改和读“脏”数据。nA、1级封锁协议nB、2级封锁协议nC、3级封锁协议nD、两段锁协议74第74页,本讲稿共75页n8.以下_封锁违反两段锁协议。nA、Slock A Slock B Xlock C Unlock A Unlock B Unlock CnB、Slock A Slock B Xlock C Unlock C Unlock B Unlock AnC、Slock A Slock B Xlock C Unlock B Unlock C Unlock AnD、Slock A Unlock A Slock B Xlock C Unlock B Unlock C练习75第75页,本讲稿共75页