数据库原理与应用教程―SQLServer

上传人:人*** 文档编号:569717509 上传时间:2024-07-30 格式:PPT 页数:60 大小:404KB
返回 下载 相关 举报
数据库原理与应用教程―SQLServer_第1页
第1页 / 共60页
数据库原理与应用教程―SQLServer_第2页
第2页 / 共60页
数据库原理与应用教程―SQLServer_第3页
第3页 / 共60页
数据库原理与应用教程―SQLServer_第4页
第4页 / 共60页
数据库原理与应用教程―SQLServer_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《数据库原理与应用教程―SQLServer》由会员分享,可在线阅读,更多相关《数据库原理与应用教程―SQLServer(60页珍藏版)》请在金锄头文库上搜索。

1、数据库原理与应用教程数据库原理与应用教程SQL Server第第12章事务与并发控制章事务与并发控制 稼妥臃多报奶密旬她擅叮岔渔翌庇趁搔纲深菇佐嘶林酷厕遇英附砒睡靠尚数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制关系型数据库有四个显著的特征,即关系型数据库有四个显著的特征,即完整性完整性安全性安全性监测性监测性并发性并发性完整性是数据库的一个重要特征,也是保证数据库中的完整性是数据库的一个重要特征,也是保证数据库中的数据切实有效、防止错误、实现商业规则的一种重要数据切实有效、防止错误、实现商业规则的一种重要机制。在机制。在

2、SQLServer中,数据的完整性是通过一系列中,数据的完整性是通过一系列逻辑来保障的,这些逻辑分为三个方面,即实体完整逻辑来保障的,这些逻辑分为三个方面,即实体完整性、域完整性和参考完整性。性、域完整性和参考完整性。桩焉炼鸟涂径诫揪颈纹时泌仰测氮赃急患旺猴耽墩升骤婆系贫翌识且讽洼数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制数据库的安全性就是要保证数据库中数据的安全,防止数据库的安全性就是要保证数据库中数据的安全,防止未授权用户随意修改数据库中的数据,确保数据的安全。未授权用户随意修改数据库中的数据,确保数据的安全。在大

3、多数数据库管理系统中,主要在大多数数据库管理系统中,主要是通过许可来保证数是通过许可来保证数据库的安全性据库的安全性。监测性:对任何系统都可以这样说,没有监测,就没有监测性:对任何系统都可以这样说,没有监测,就没有优化。这句话用在数据库管理系统方面,也是切合实际优化。这句话用在数据库管理系统方面,也是切合实际的。只有通过对数据库进行全面的性能监测,也才能发的。只有通过对数据库进行全面的性能监测,也才能发现影响系统性能的因素和瓶颈,才能针对瓶颈因素,采现影响系统性能的因素和瓶颈,才能针对瓶颈因素,采取切合实际策略,解决问题,提高系统的性能。取切合实际策略,解决问题,提高系统的性能。楞园魔瞧憎很镑

4、竹占垫尖敞教刃惧士灰爹畴合衅晦值需烘囚她姐阮绚哩背数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制并发性:数据库是一个共享资源,可以供多个用户使用。并发性:数据库是一个共享资源,可以供多个用户使用。这些用户程序可以一个一个地串行执行,每个时刻只有这些用户程序可以一个一个地串行执行,每个时刻只有一个用户程序运行,执行对数据库的存取,其他用户程一个用户程序运行,执行对数据库的存取,其他用户程序必须等到这个用户程序结束以后方能对数据库存取。序必须等到这个用户程序结束以后方能对数据库存取。但是如果一个用户程序涉及大量数据的输入、输出

5、交换,但是如果一个用户程序涉及大量数据的输入、输出交换,则数据库系统的大部分时间处于闲置状态。为了充分利则数据库系统的大部分时间处于闲置状态。为了充分利用数据库资源,发挥数据库共享资源的特点,应该允许用数据库资源,发挥数据库共享资源的特点,应该允许多个用户并行地存取数据库。但这样就会产生多个用户多个用户并行地存取数据库。但这样就会产生多个用户程序并发存取同一数据的情况,若对并发操作不加控制程序并发存取同一数据的情况,若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致就可能会存取和存储不正确的数据,破坏数据库的一致性,所以数据库管理系统必须提供并发控制机制。性,所以数据库管理系

6、统必须提供并发控制机制。葫酵危习避睁朗传沈观蛾山肥礁斩变惊坤衣椎秩谣鄙急体控讶蓖护焕艘疙数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制并发控制机制的好坏是衡量一个数据库管理系并发控制机制的好坏是衡量一个数据库管理系统性能的重要标志之一统性能的重要标志之一。SQLServer以事务为单位通常使用锁来实现以事务为单位通常使用锁来实现并发控制。并发控制。当用户对数据库并发访问时,为了当用户对数据库并发访问时,为了确保事务完整性和数据库一致性,需要使用锁确保事务完整性和数据库一致性,需要使用锁定。这样,就可以保证任何时候都可以有多

7、个定。这样,就可以保证任何时候都可以有多个正在运行的用户程序,但是所有用户程序都在正在运行的用户程序,但是所有用户程序都在彼此完全隔离的环境中运行。彼此完全隔离的环境中运行。嵌沤报辜摇舒肇鸿弹诺烟淫缠惋侈攀袱骂印递锚田谓陪涎酚住赚沮躬角傅数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.1事务概述事务概述事务处理是数据库的主要工作,事务处理是数据库的主要工作,事务由一系列的数据操作组事务由一系列的数据操作组成,是数据库应用程序的基本逻辑单元,用来保证数据的一成,是数据库应用程序的基本逻辑单元,用来保证数据的一致性致性。S

8、QLServer2005提供了几种自动的可以通过编程来提供了几种自动的可以通过编程来完成的机制,包括事务日志、完成的机制,包括事务日志、SQL事务控制语句,以及事务事务控制语句,以及事务处理运行过程中通过锁定保证数据完整性的机制。处理运行过程中通过锁定保证数据完整性的机制。事务和存储过程类似,事务和存储过程类似,由一系列由一系列T-SQL语句组成,是语句组成,是SQLServer2005系统的执行单元。系统的执行单元。在数据库处理数据的时候,在数据库处理数据的时候,有一些操作是不可分割的整体。例如,当用银行卡消费的时有一些操作是不可分割的整体。例如,当用银行卡消费的时候首先要在账户扣除资金,然

9、后再添加资金到公司的户头上。候首先要在账户扣除资金,然后再添加资金到公司的户头上。在这个过程中用户所进行的实际操作可以理解成不可分割的,在这个过程中用户所进行的实际操作可以理解成不可分割的,不能只扣除不添加,当然也不能只添加不扣除。不能只扣除不添加,当然也不能只添加不扣除。玫鹏瞪迎棒体亭剁浚闭漫脸部潞韦哗酉驹芜锹骚莫环烤料叹巨挝卫许仲魁数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.1事务概述事务概述利用事务可以解决上面的问题,即把这些操作放利用事务可以解决上面的问题,即把这些操作放在一个容器里,强制用户执行完所有的操

10、作或者在一个容器里,强制用户执行完所有的操作或者不执行任何一条语句。事务就是作为单个逻辑工不执行任何一条语句。事务就是作为单个逻辑工作单元执行的一系列操作,这一系列的操作或者作单元执行的一系列操作,这一系列的操作或者都被执行或者都不被执行。都被执行或者都不被执行。在在SQLServer2005中,中,事务要求处理时必须满事务要求处理时必须满足四个原则,即原子性、一致性、隔离性和持久足四个原则,即原子性、一致性、隔离性和持久性。性。芹迅僳奏玲张吕灶寨迅箭头腕鲜谚郡擞霓凯身摹亦兔笆俐翼苇授于撵延裔数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控

11、制事务与并发控制12.1事务概述事务概述(1)原原子子性性:事事务务必必须须是是原原子子工工作作单单元元,对对于于其其数数据据修修改改,要要么么全全都都执执行行,要要么么全全都都不不执执行行。这这一一性性质质即即使使在在系系统统崩崩溃溃之之后后仍仍能能得得到到保保证证,在在系系统统崩崩溃溃之之后后将将进进行行数数据据库库恢恢复复,用用来来恢恢复复和和撤撤销销系系统统崩崩溃溃处处于于活活动动状状态态的的事事务务对对数数据据库库的的影影响响,从从而而保保证证事事务务的的原原子子性性。系系统统对对磁磁盘盘上上的的任任何何实实际际数数据据的的修修改改之之前前都都会会将将修修改改操操作作信信息息本本身身

12、的的信信息息记记录录到到磁磁盘盘上上。当当发发生生崩崩溃溃时时,系系统统能能根根据据这这些些操操作作记记录录当当时时该该事事务务处处于于何何种种状状态态,以以此此确确定定是是撤撤销销该该事事务务所所做做出出的的所所有有修修改操作,还是将修改的操作重新执行。改操作,还是将修改的操作重新执行。剪跳泄漓模徒处哪伊梆幼赫阴侮蕊铸挡撅施券僻绘烂灭喘招模箱犬谗妮粪数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.1事务概述事务概述(2)一一致致性性:一一致致性性要要求求事事务务执执行行完完成成后后,将将数数据据库库从从一一个个一一致

13、致状状态态转转变变到到另另一一个个一一致致状状态态。即即在在相相关关数数据据库库中中,所所有有规规则则都都必必须须应应用用于于事事务务的的修修改改,以以保保持持所所有有数数据据的的完完整整性性,事事务务结结束束时时,所所有有的的内内部部数数据据结结构构都都必必须须是是正正确确的的。例例如如在在转转账账的的操操作作中中,各各账账户户金金额额必必须须平平衡衡,这这一一条条规规则则对对于于程程序序员员而而言言是是一一个个强强制制的的规规定定,由由此此可可见见,一一致致性性与与原原子子性性是是密密切切相相关关的的。事事务务的的一一致致性性属属性性要要求求事事务务在在并并发发执执行行的的情情况况下下事事

14、务务的的一一致致性性仍仍然然满满足足。它它在在逻逻辑辑上上不不是是独独立立的的,它它由由事事务务的的隔隔离离性来表示。性来表示。叉而肃惕腆侯灰缎厉宋油毛枯敢扁渗于诉钢渡啦宪嘻俩籽呢肘献亥扭虏蹋数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.1事务概述事务概述(3)隔隔离离性性:也也称称为为独独立立性性,是是指指并并行行事事务务的的修修改改必必须须与与其其他他并并行行事事务务的的修修改改相相互互独独立立。隔隔离离性性意意味味着着一一个个事事务务的的执执行行不不能能被被其其他他事事务务干干扰扰。即即一一个个事事务务内内部部

15、的的操操作作及及使使用用的的数数据据对对并并发发的的其其他他事事务务是是隔隔离离的的,并并发发执执行行的的各各个个事事务务之之间间不不能能互互相相干干扰扰。它它要要求求即即使使有有多多个个事事务务并并发发执执行行,看看上去每个成功事务按串行调度执行一样。上去每个成功事务按串行调度执行一样。估者严硷胃层损旧脯盼乏植勋喇鲍址络廊伴何贯雁扫尤拴蚜煞驯捐彦朝限数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.1事务概述事务概述(4)持持久久性性:在在事事务务完完成成提提交交之之后后,就就对对系系统统产产生生持持久久的的影影响响,

16、即即事事务务的的操操作作将将写写入入数数据据库库中中,无无论论发发生生何何种种机机器器和和系系统统故故障障都都不不应应该该对对其其有有任任何何影影响响。例例如如,自自动动柜柜员员机机(ATM)在在向向客客户户支支付付一一笔笔钱钱时时,就就不不用用担担心心丢丢失失客客户户的的取取款款记记录录。事事务务的的持持久久性性保保证证事事务务对对数数据据库库的的影影响响是是持持久久的的,即使系统崩溃。即使系统崩溃。活郭六朗咬剐购歧庚满悔堑苑补找咯颖漓漾卒伺米拙诈俯默田苦梗俺影睦数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.2事务

17、的类型事务的类型根据事务的系统设置和运行模式的不同,根据事务的系统设置和运行模式的不同,SQLServer2005将事务分为多种类型。将事务分为多种类型。12.2.1根据系统的设置分类根据系统的设置分类根据系统的设置,根据系统的设置,SQLServer2005将事务分为将事务分为两种类型:两种类型:系统提供的事务和用户定义的事务系统提供的事务和用户定义的事务。睡去溢院走呼耽棺畸拆肮喀湘旗针已盈语条顾斗础葡诺鲜憎催既握韩帆匠数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.2.1根据系统的设置分类根据系统的设置分类1.系统

18、事务系统事务系统提供的事务是指在执行某些语句时,一条语系统提供的事务是指在执行某些语句时,一条语句就是一个事务。但是要明确,一条语句的对象句就是一个事务。但是要明确,一条语句的对象既可能是表中的一行数据,也可能是表中的多行既可能是表中的一行数据,也可能是表中的多行数据,甚至是表中的全部数据。因此,只有一条数据,甚至是表中的全部数据。因此,只有一条语句构成的事务也可能包含了多行数据的处理。语句构成的事务也可能包含了多行数据的处理。谚坐磁遗挖书的媒仿拔愈赖淹舶涩害曾鹅弥城茄废籽慌铲灶瘩俭疥缔笺挖数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer系统提供的事务语句如下:系统

19、提供的事务语句如下:ALTERTABLE、CREATE、DELETE、DROP、FETCH、GRANT、INSERT、OPEN、REBOKE、SELECT、UPDATE、TRUNCATETABLE,这些语句本身就构成了一个事务。这些语句本身就构成了一个事务。节业羔雄嘿阅析富丰斥肥芝燃裸朗丑巫杜帅纺导菩狰瓷岂萝去栗深趋躬革数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.2.1根据系统的设置分类根据系统的设置分类1.系统事务系统事务例例12-1使用使用CREATETABLE创建一个表。创建一个表。CREATETABLEst

20、udent(IdCHAR(10),NameCHAR(6),SexCHAR(2)这条语句本身就构成了一个事务。这条语句本身就构成了一个事务。这条语句由于没有使用条件限制,那么这条语句就是创建这条语句由于没有使用条件限制,那么这条语句就是创建包含包含3个列的表。要么创建全部成功,要么全部失败。个列的表。要么创建全部成功,要么全部失败。膜缺物痊匿契犹翅盯墩资轰豆婉鹿担充蚌践虽估呆眯安亡痛蛰窑熙跋宠矢数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.2.1根据系统的设置分类根据系统的设置分类2.用户定义事务用户定义事务在实际应用

21、中,大多数的事务处理采用了用户定义的事务在实际应用中,大多数的事务处理采用了用户定义的事务来处理。在开发应用程序时,可以使用来处理。在开发应用程序时,可以使用BEGINTRANSACTION语句来定义明确的用户定义的事务。在使语句来定义明确的用户定义的事务。在使用用户定义的事务时,一定要注意事务必须有明确的结束用用户定义的事务时,一定要注意事务必须有明确的结束语句来结束。如果不使用明确的结束语句来结束,那么系语句来结束。如果不使用明确的结束语句来结束,那么系统可能把从事务开始到用户关闭连接之间的全部操作都作统可能把从事务开始到用户关闭连接之间的全部操作都作为一个事务来对待。事务的明确结束可以使

22、用两个语句中为一个事务来对待。事务的明确结束可以使用两个语句中的一个:的一个:COMMIT语句和语句和ROLLBACK语句。语句。COMMIT语句语句是提交语句,将全部完成的语句明确地提交到数据库中。是提交语句,将全部完成的语句明确地提交到数据库中。ROLLBACK语句是取消语句,该语句将事务的操作全部取语句是取消语句,该语句将事务的操作全部取消,即表示事务操作失败。消,即表示事务操作失败。圃斜虏径缴驾侥惯赫凑镍呈尹等毡上梭践孙陀判已酱伺世褂嫂蛙旅嘉柄话数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.2.2根据运行模式

23、分类根据运行模式分类根据运行模式的不同,根据运行模式的不同,SQLServer2005将事务将事务分为分为4种类型:显示事务、隐式事务、自动提交事种类型:显示事务、隐式事务、自动提交事务和批处理级事务。务和批处理级事务。1自动提交事务自动提交事务自动提交事务是指每条单独的自动提交事务是指每条单独的T-SQL语句都是一语句都是一个事务。如果没有通过任何个事务。如果没有通过任何T-SQL语句设置事务,语句设置事务,一条一条T-SQL语句就是一个事务,语句执行完事务语句就是一个事务,语句执行完事务就结束。以前我们使用的每一条就结束。以前我们使用的每一条T-SQL语句都可语句都可以叫做一个自动提交事务

24、。以叫做一个自动提交事务。蓄滞布灼炎啊舱催荤唾诈易掂驴欧秘搞绦苟寄绢胎冲砌狠讣糕广峙狡修幼数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.2.2根据运行模式分类根据运行模式分类2显式事务显式事务显式事务指每个事务均以显式事务指每个事务均以BEGINTRANSACTION语句、语句、COMMITTRANSACTION或或ROLLBACKTRANSACTION语句明确地定义了什么时候启动事务、什么时候结束事务的语句明确地定义了什么时候启动事务、什么时候结束事务的事务。事务。3隐式事务隐式事务隐式事务指在前一个事务完成时新事

25、务隐式启动,但每个事隐式事务指在前一个事务完成时新事务隐式启动,但每个事务仍以务仍以COMMITTRANSACTION或或ROLLBACKTRANSACTION语句显式结束。语句显式结束。4批处理级事务批处理级事务批处理级事务是批处理级事务是SQLServer2005的新增功能,该事务只能的新增功能,该事务只能应用于多个活动结果集(应用于多个活动结果集(MARS),在),在MARS会话中启动的会话中启动的T-SQL显式或隐式事务变为批处理级事务。显式或隐式事务变为批处理级事务。成下掩昆聊公快那粗掺贝垦谩硼喻陪窄州沾曹赴绎芦及喻还恰鹏焙语匙兑数据库原理与应用教程SQLServer数据库原理与应用

26、教程SQLServer第第12章章 事务与并发控制事务与并发控制12.3事务处理语句事务处理语句所有的所有的T-SQL语句本身都是内在的事务。另外,语句本身都是内在的事务。另外,SQLServer中有专门的事务处理语句,这些语句将中有专门的事务处理语句,这些语句将SQL语句集语句集合分组后形成单个的逻辑工作单元。事务处理的合分组后形成单个的逻辑工作单元。事务处理的T-SQL语句语句包括:包括:(1)定义一个事务的开始:定义一个事务的开始:BEGINTRANSACTTCN;(2)提交一个事务:提交一个事务:COMMITTRANSACTION;(3)回滚事务:回滚事务:ROLLBACKTRANSA

27、CTION;(4)在事务内设置保存点:在事务内设置保存点:SAVETRANSACTION。岩饭疡卖氖鼠菊裁嗣贮燃调迁冗蕉戚袄傍鸳剑缕萎洁盼感典炔杂亢髓红坪数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.3事务处理语句事务处理语句1BEGINTRANSACTION语句语句BEGINTRANSACTION语句定义一个显式本地事务的起始语句定义一个显式本地事务的起始点,即事务的开始。其语法格式为:点,即事务的开始。其语法格式为:BEGINTRAN|TRANSACTIONtransaction_name|tran_name_v

28、ariableWITHMARKdescription其中:其中:(1)TRANSACTION关键字可以缩写为关键字可以缩写为TRAN。(2)transactionname是给事务分配的名称,事务可以定义是给事务分配的名称,事务可以定义名称,也可以不定义名称,但是只能使用符合标识符规则的名称,也可以不定义名称,但是只能使用符合标识符规则的名字。名字。(3)tran_name_variable是含有效事务名称的变量的名称,是含有效事务名称的变量的名称,必须用数据类型声明这个变量。必须用数据类型声明这个变量。(4)WITHMARK用于指定在日志中标记事务,用于指定在日志中标记事务,descripti

29、on是是描述该标记的字符串。描述该标记的字符串。樱遥片鳞冰牡琵契努令愁表撂呸恐无盐嚎行摘惨诉梳扒碎腑炬乏抓迁庆固数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.3事务处理语句事务处理语句2.COMMITTRANSACTION语句语句COMMITTRANSACTION语句为提交一个事务,标志一语句为提交一个事务,标志一个成功的隐式事务或显式事务的结束。其语法格式为:个成功的隐式事务或显式事务的结束。其语法格式为:COMMITTRAN|TRANSACTIONtransaction_name|tran_name_variab

30、le对于对于COMMITTRANSACTION语句需要注意以下几点:语句需要注意以下几点:(1)因为数据已经永久修改,所以在因为数据已经永久修改,所以在COMMITTRANSACTION语句后不能回滚事务。语句后不能回滚事务。(2)在嵌套事务中使用在嵌套事务中使用COMMITTRANSACTION时,内部事时,内部事务的提交并不释放资源,也没有执行永久修改,只有在提交务的提交并不释放资源,也没有执行永久修改,只有在提交了外部事务时,数据修改才具有永久性而且资源才会被释放。了外部事务时,数据修改才具有永久性而且资源才会被释放。恶茎透长妨握的电卢遮拒猾怀界择墓欢庙贱怂吮症周在责忍役从坪斡粤纯数据库

31、原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.3事务处理语句事务处理语句3.ROLLBACKTRANSACTION语句语句ROLLBACKTRANSACTION语句将显式事务或隐式事务回语句将显式事务或隐式事务回滚到事务的起点或事务内的某个保存点,它也标志一个事务滚到事务的起点或事务内的某个保存点,它也标志一个事务的结束。其语法格式为:的结束。其语法格式为:ROLLBACKTRAN|TRANSACTIONtransaction_name|tran_name_variable|savepoint_name|savepoint

32、_variable对于对于ROLLBACKTRANSACTION语句需要注意以下几点:语句需要注意以下几点:(1)如果不指定回滚的事务名称或保存点,则如果不指定回滚的事务名称或保存点,则ROLLBACKTRANSACTION命令会将事务回滚到事务的起点。命令会将事务回滚到事务的起点。研忽涌列滦毡嘶缔诲学攻类爹攻樊爬槽诽尽套阔傲索一但翰磨搓池嚣称季数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer(2)在嵌套事务时,该语句将所有内层事务回滚到最远的在嵌套事务时,该语句将所有内层事务回滚到最远的BEGINTRANSACTION语句,语句,transaction_name也

33、只能也只能是来自最远的是来自最远的BEGINTRANSACTION语句的名称。语句的名称。(3)在执行在执行COMMITTRANSACTION语句后不能回滚事务。语句后不能回滚事务。(4)如果在触发器中发出如果在触发器中发出ROLLBACKTRANSACITON命令,命令,将回滚对当前事务中所做的所有数据修改,包括触发器所将回滚对当前事务中所做的所有数据修改,包括触发器所做的修改。做的修改。(5)事务在执行过程中出现任何错误,事务在执行过程中出现任何错误,SQLServer都将自都将自动回滚事务。动回滚事务。重处尺缓肮诗宝撞雏渊恿癣那娟搁蘑镶咯徐诽妖贩魁亭茸耀梅鳞为赔恍倍数据库原理与应用教程S

34、QLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.3事务处理语句事务处理语句4.SAVETRANSACTION语句语句SAVETRANSACTION语句用于在事务内设置保存点。语句用于在事务内设置保存点。其语法格式为:其语法格式为:SAVETRAN|TRANSACTIONsavepoint_name|savepoint_variable在事务内的某个位置建立一个保存点,使用户可以将事在事务内的某个位置建立一个保存点,使用户可以将事务回滚到该保存点的状态,而不回滚整个事务。务回滚到该保存点的状态,而不回滚整个事务。无剂术考鲜乎敦捎士份耘耪洪姐合

35、犊争缅逝俱分饯仔涟漫包记济寸出漆盎数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.3事务处理语句事务处理语句使用事务时应注意以下几点:使用事务时应注意以下几点:(1)不是所有的不是所有的T-SQL语句都能放在事务里,通语句都能放在事务里,通常常insert、update、delete、select等可以放在等可以放在事务里,创建、删除、恢复数据库等不能放在事事务里,创建、删除、恢复数据库等不能放在事务里。务里。(2)事务要尽量的小,而且一个事务占用的资源事务要尽量的小,而且一个事务占用的资源越少越好。越少越好。(3)如

36、果事务在事务中间发生了错误,并不是所如果事务在事务中间发生了错误,并不是所有情况都会回滚,只有达到一定的错误级别才会有情况都会回滚,只有达到一定的错误级别才会回滚,可以在事务中使用回滚,可以在事务中使用err变量查看是否发变量查看是否发生了错误。生了错误。圾侄傣一滞侣蚕清急汉鲁耙涩撒继敌纽违堑苍电梆蛀架读桥羚楔陨驱贱窒数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.3事务处理语句事务处理语句例例12-2定义一个事务,将所有选修了定义一个事务,将所有选修了c001号课程的学号课程的学生的分数加生的分数加5分,并提交该事务

37、。分,并提交该事务。DECLAREt_nameCHAR(10)SETt_name=add_scoreBEGINTRANSACTIONt_nameUSE教学库教学库UPDATE选课选课SET成绩成绩=成绩成绩+5WHERE课程号课程号=C001COMMITTRANSACTIONt_name靳玄陀订淬靛钒沁宣望溢畴贯弹骚贡闲蘑毒攒废轰权予银妨浮勺摇违馈楼数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.3事务处理语句事务处理语句例例12-3定义一个事务,向教学库的学生表中插入一行定义一个事务,向教学库的学生表中插入一行数据,

38、然后再删除该行。执行后,新插入的数据行并没数据,然后再删除该行。执行后,新插入的数据行并没有被删除。有被删除。BEGINTRANSACTIONUSE教学库教学库INSERTINTO学生学生(学生号学生号,姓名姓名,性别性别,专业专业)VALUES(0501001,朱一虹朱一虹,女女,计算机计算机)SAVETRANsavepointDELETEFROM学生学生WHERE姓名姓名=朱一虹朱一虹ROLLBACKTRANsavepointCOMMIT命轴收南勃文寐钒厦尖郁珠峪懂岂钩钡管党醇类华垢葱胸工涕敦安绣烂粘数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章

39、事务与并发控制事务与并发控制12.3事务处理语句事务处理语句例例12-4定义一个事务,向仓库库存数据库的商品表中插入一行数据,如果插入成功,则定义一个事务,向仓库库存数据库的商品表中插入一行数据,如果插入成功,则向库存情况表中插入一行或多行此商品的库存情况信息,并显示向库存情况表中插入一行或多行此商品的库存情况信息,并显示“添加成功添加成功”;如果插;如果插入失败则不向库存情况表中插入数据,并显示入失败则不向库存情况表中插入数据,并显示“添加失败添加失败”。BEGINTRANSACTIONUSE仓库库存仓库库存INSERTINTO商品商品(商品编号商品编号,商品名称商品名称,单价单价,生产商生

40、产商)VALUES(bx-159,冰箱冰箱,2500,安徽美菱安徽美菱)IFerror=0BEGININSERTINTO库存情况库存情况(仓库编号仓库编号,商品编号商品编号,数量数量)VALUES(002,bx-159,20)PRINT添加成功!添加成功!COMMITENDELSEBEGINPRINT添加失败!添加失败!ROLLBACKEND又竟丛辟孩淮锐跑修近炔霉厕生颗鹰通灌羽亢妻厢铭桩时早柄轻畅柑渊蛤数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4事务的并发控制事务的并发控制并发控制指的是当多个用户同时更新行时,

41、用于保护数并发控制指的是当多个用户同时更新行时,用于保护数据库完整性的各种技术,目的是保证一个用户的工作不据库完整性的各种技术,目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。会对另一个用户的工作产生不合理的影响。锁是实现并发控制的主要方法,是多个用户能够同时操锁是实现并发控制的主要方法,是多个用户能够同时操纵同一个数据库中的数据而不发生数据不一致现象的重纵同一个数据库中的数据而不发生数据不一致现象的重要保障。如果没有锁定且多个用户同时访问一个数据库,要保障。如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时就可能会发生问则当他们的事务同时使用相同的数

42、据时就可能会发生问题,这些问题包括以下几种情况题,这些问题包括以下几种情况:捣卵神忘害利快汐饰坏铆半糜庆渗酵流品猛撵柳谬袍换缉鲜淆俊惯癌壶嚼数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.1并发带来的问题并发带来的问题 (1)丢失修改丢失修改:指在一个事务读取一个数据时,另外一:指在一个事务读取一个数据时,另外一个事务也访问该同一数据。那么,在第一个事务中修改个事务也访问该同一数据。那么,在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。这样第了这个数据后,第二个事务也修改了这个数据。这样第一个事务内的修

43、改结果就被丢失,因此称为丢失修改。一个事务内的修改结果就被丢失,因此称为丢失修改。例如:事务例如:事务T1读取某表中数据读取某表中数据A=20,事务,事务T2也读取也读取A=20,事务,事务T1修改修改A=A-1,事务,事务T2也修改也修改A=A-1;最终;最终结果结果A=19,事务事务T1的修改被丢失。的修改被丢失。铁耐褂沙窒显散候航谜钓颂耪绊辽判券鹤错遍沦录凤镜刊邀灵胳害锗彭陀数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.1并发带来的问题并发带来的问题 (2)脏读脏读:指当一个事务正在访问数据,并且对数据进:

44、指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是读到的这个数据是“脏数据脏数据”,依据,依据“脏数据脏数据”所做的所做的操作可能是不正确的。操作可能是不正确的。例如:事务例如:事务T1读取某表中数据读取某表中数据A=20,并修改,并修改A=A-1,写,写回数据库,事务回数据库,事务T2读取读取A=19,事

45、务,事务T1回滚了前面的操回滚了前面的操作,事务作,事务T2也修改也修改A=A-1;最终结果;最终结果A=18,事务事务T2读取读取的就是的就是“脏数据脏数据”。只瘴歪问轰秤僚恒冯兰亲诧滞鸡用罐养谨芋裸琅算宿倔隙面刻帜斧藕锯启数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.1并发带来的问题并发带来的问题 (3)不可重复读不可重复读:指在一个事务内,多次读同一数据。:指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务

46、中的两次读数据之间,由于数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。数据是不一样的,因此称为是不可重复读。例如:事务例如:事务T1读取某表中数据读取某表中数据A=20,并修改,并修改A=A-1,写,写回数据库,事务回数据库,事务T2读取读取A=19,事务,事务T1回滚了前面的操回滚了前面的操作,事务作,事务T2也修改也修改A=A-1;最终结果;最终结果A=18,事

47、务事务T2读取读取的就是的就是“脏数据脏数据”。檬搜绷锌笺映勇都词狠有号作剃酱解徐苟诛兴蜡类歧灭指而流褒肪浓嗓撰数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.1并发带来的问题并发带来的问题 (4)幻读幻读:与不可重复读相似,是指当事务不是独立执:与不可重复读相似,是指当事务不是独立执行时发生的一种现象。例如,第一个事务对一个表中的行时发生的一种现象。例如,第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种

48、修改是同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好像个事务的用户发现表中还有没有修改的数据行,就好像发生了幻觉一样。当对某条记录执行插入或删除操作而发生了幻觉一样。当对某条记录执行插入或删除操作而该记录属于某个事务正在读取的行的范围时,会发生幻该记录属于某个事务正在读取的行的范围时,会发生幻读问题。读问题。坎卡跌交软瑰池卸抿雪睬乎细厕荤忻督寂壳蹋则价撕载镁如铬阐酝霍亦最数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第1

49、2章章 事务与并发控制事务与并发控制12.4.2锁的粒度锁的粒度SQLServer使用了(三层)锁协议,从而有效的控制并使用了(三层)锁协议,从而有效的控制并发操作可能产生的丢失更新、读发操作可能产生的丢失更新、读“脏脏”数据、不可重复数据、不可重复读等错误。读等错误。SQLServer具有多种不同粒度的锁,允许事务锁定不同具有多种不同粒度的锁,允许事务锁定不同的资源,并能自动使用与任务相对应的等级锁来锁定资的资源,并能自动使用与任务相对应的等级锁来锁定资源对象,以使锁的成本最小化。源对象,以使锁的成本最小化。最崎蝗薛鹅恫摧敢教洱掸倒估迈殿陡由身汰绩掠侨腕液虹徘宁网探批争绽数据库原理与应用教程

50、SQLServer数据库原理与应用教程SQLServer(1)行级锁行级锁表中的行是锁定的最小空间资源。行级锁是指事务操作过表中的行是锁定的最小空间资源。行级锁是指事务操作过程中,锁定一行或若干行数据。程中,锁定一行或若干行数据。(2)页和页级锁页和页级锁在在SQLServer中,除行外的最小数据单位是页。一个页中,除行外的最小数据单位是页。一个页有有8KB,所有的数据、日志和索引都放在页上。为了管理,所有的数据、日志和索引都放在页上。为了管理方便,表中的行不能跨页存放,一行的数据必须在同一个方便,表中的行不能跨页存放,一行的数据必须在同一个页上。页上。页级锁是指在事务的操作过程中,无论事务处

51、理多少数据,页级锁是指在事务的操作过程中,无论事务处理多少数据,每一次都锁定一页。每一次都锁定一页。树秽扒训定馁洛琶鲁逝绘王蒜称攘笛裙雾遣吼钥荷铆漫习苗挥馋菲志缴软数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer(3)簇和簇级锁簇和簇级锁页之上的空间管理单位是簇,一个簇有页之上的空间管理单位是簇,一个簇有8个连续的页。个连续的页。簇级锁指事务占用一个簇,这个簇不能被其他事务占用。簇级锁指事务占用一个簇,这个簇不能被其他事务占用。簇级锁是一种特殊类型的锁,只用在一些特殊的情况下。簇级锁是一种特殊类型的锁,只用在一些特殊的情况下。例如在创建数据库和表时,系统用簇级锁分配

52、物理空间。例如在创建数据库和表时,系统用簇级锁分配物理空间。由于系统是按照簇分配空间的,系统分配空间时使用簇级由于系统是按照簇分配空间的,系统分配空间时使用簇级锁,可防止其他事务同时使用一个簇。锁,可防止其他事务同时使用一个簇。筑壮帚位枕满媒乐供仁夷抚格沙给南淌孟捣哀砍形畅留着捕邪兆西矮匙病数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer(4)表级锁表级锁表级锁是一种主要的锁。表级锁是指事务在操纵某一个表的数据时锁表级锁是一种主要的锁。表级锁是指事务在操纵某一个表的数据时锁定了这些数据所在的整个表,其他事务不能访问该表中的数据。当事定了这些数据所在的整个表,其他事务

53、不能访问该表中的数据。当事务处理的数量比较大时,一般使用表级锁。务处理的数量比较大时,一般使用表级锁。(5)数据库级锁数据库级锁数据库级锁是指锁定整个数据库,防止其他任何用户或者事务对锁数据库级锁是指锁定整个数据库,防止其他任何用户或者事务对锁定的数据库进行访问。定的数据库进行访问。这种锁的等级最高,因为它控制整个数据库的操作。数据库级锁是一这种锁的等级最高,因为它控制整个数据库的操作。数据库级锁是一种非常特殊的锁,它只用于数据库的恢复操作。只要对数据库进行恢种非常特殊的锁,它只用于数据库的恢复操作。只要对数据库进行恢复操作,就需要将数据库设置为单用户模式,防止其他用户对该数据复操作,就需要将

54、数据库设置为单用户模式,防止其他用户对该数据库进行各种操作。库进行各种操作。稽工绪痢苍策奇撰犁疙一苏闽痰滚组惦帆遗钵拽豆春埃蒸死靖耽会碰反伟数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer 行 页 簇 表 数据库品砰朋海水央慈炼俞涣皋留杀斜询议件腆头忙蛇傻缆芋咕靶匀挣限疵钵芬数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.3锁的类型锁的类型数据库引擎使用不同类型的锁锁定资源,这些锁确定了并数据库引擎使用不同类型的锁锁定资源,这些锁确定了并发事务访问资源的方式。发事务访问资源的方式。SQL

55、Server2005中常见的锁有以下几种:中常见的锁有以下几种:(1)共享锁(共享锁(SharedLock)共享共享(S)锁允许并发事务读取(锁允许并发事务读取(SELECT)一个资源。资)一个资源。资源上存在共享源上存在共享(S)锁时,任何其它事务都不能修改数据。锁时,任何其它事务都不能修改数据。一旦已经读取数据,便立即释放资源上的共享一旦已经读取数据,便立即释放资源上的共享(S)锁,除锁,除非将事务隔离级别设置为可重复读或更高级别,或者在事非将事务隔离级别设置为可重复读或更高级别,或者在事务生存周期内用锁定提示保留共享务生存周期内用锁定提示保留共享(S)锁。锁。户矛讨眠付淘岸录机找德洋膘敞

56、传子矛樟诣多蚜坚唐又奉倡缔亏港出闷譬数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.3锁的类型锁的类型(2)排它锁(排它锁(ExclusiveLock)排它排它(X)锁可以防止并发事务对资源进行访问,其它事务锁可以防止并发事务对资源进行访问,其它事务不能读取或修改排它不能读取或修改排它(X)锁锁定的数据。锁锁定的数据。即排它即排它(X)锁锁锁锁定的资源只允许进行锁定操作的程序使用,其它任何对它定的资源只允许进行锁定操作的程序使用,其它任何对它的操作均不会被接受。的操作均不会被接受。执行数据更新命令即执行数据更新命令

57、即INSERT、UPDATE或或DELETE命令命令时时SQLServer会自动使用排它会自动使用排它(X)锁,锁,但当对象上有其但当对象上有其它锁存在时无法对其加排它它锁存在时无法对其加排它(X)锁。排它锁。排它(X)锁一直到事锁一直到事务结束才能被释放。务结束才能被释放。巩掺滑烈瞎屉帛掇匝曰濒令停捣烁啡洗伦肌沪空俭召姚律胞暮擦谈豆妆延数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.3锁的类型锁的类型(3)更新锁(更新锁(UpdateLock)更新更新(U)锁可以防止通常形式的死锁。一般更新模式由一个事务组成,锁

58、可以防止通常形式的死锁。一般更新模式由一个事务组成,此事务读取记录,获取资源(页或行)的共享锁,然后修改行,此操作此事务读取记录,获取资源(页或行)的共享锁,然后修改行,此操作要求锁转换为排它锁。要求锁转换为排它锁。如果两个事务获得了资源上的共享锁,然后试图同时更新数据,则一个如果两个事务获得了资源上的共享锁,然后试图同时更新数据,则一个事务尝试将锁转换为排它锁。共享锁到排它锁的转换必须等待一段时间,事务尝试将锁转换为排它锁。共享锁到排它锁的转换必须等待一段时间,因为一个事务的排它锁与其它事务的共享锁不兼容,此时发生锁等待,因为一个事务的排它锁与其它事务的共享锁不兼容,此时发生锁等待,而第二个

59、事务也试图获取排它锁以进行更新;由于两个事务都要转换为而第二个事务也试图获取排它锁以进行更新;由于两个事务都要转换为排它锁,并且每个事务都等待另一个事务释放共享模式锁,因此发生死排它锁,并且每个事务都等待另一个事务释放共享模式锁,因此发生死锁。锁。更新锁就是为了防止这种死锁而设立的。当更新锁就是为了防止这种死锁而设立的。当SQLServer准备更新数据时,准备更新数据时,它首先对数据、对象作更新锁,锁定这样数据将不能被修改,但可以读它首先对数据、对象作更新锁,锁定这样数据将不能被修改,但可以读取,等到取,等到SQLServer确定要进行更新数据操作时,它会自动将更新锁换确定要进行更新数据操作时

60、,它会自动将更新锁换为排它锁,但当对象上有其它锁存在时无法对其作更新锁锁定。为排它锁,但当对象上有其它锁存在时无法对其作更新锁锁定。不嘴讨锦桂游圃迎锭瞎苟砸东舀眩渤剃羞取爵倡娃咀伟劲厨雷硷咎特谈驳数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.3锁的类型锁的类型(4)意向锁(意向锁(IntentLock)意向锁建立一个锁机制的分层结构。意向锁建立一个锁机制的分层结构。如果对一个资源加意如果对一个资源加意向锁,则说明该资源的下层资源正在被加锁(向锁,则说明该资源的下层资源正在被加锁(S锁或锁或X锁);锁);对任一资源

61、加锁时,必须先对它的上层资源加意向锁。对任一资源加锁时,必须先对它的上层资源加意向锁。系统使用意向锁来最小化锁之间的冲突。这种结构依据锁系统使用意向锁来最小化锁之间的冲突。这种结构依据锁定的资源范围从低到高依次是行级锁层、页级锁层和表级定的资源范围从低到高依次是行级锁层、页级锁层和表级锁层。锁层。镶坞痛暖条董墓吨姐田原檄谬辑奸佛惭俞悬怜鸣秆腊僵辑哈诺惠榆肩悠样数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制意向锁表示意向锁表示SQLServer需要在层次结构中的某些底层资需要在层次结构中的某些底层资源上获取共享源上获取共享(

62、S)锁或排它锁或排它(X)锁。例如,放置在表级的锁。例如,放置在表级的共享意向锁表示事务打算在表中的页或行上放置共享共享意向锁表示事务打算在表中的页或行上放置共享(S)锁。在表级设置意向锁可防止另一个事务随后在包含那一锁。在表级设置意向锁可防止另一个事务随后在包含那一页的表上获取排它页的表上获取排它(X)锁。意向锁可以提高性能,因为锁。意向锁可以提高性能,因为SQLServer仅在表级检查意向锁来确定事务是否可以安仅在表级检查意向锁来确定事务是否可以安全地获取该表上的锁。而无须检查表中的每行或每页上的全地获取该表上的锁。而无须检查表中的每行或每页上的锁以确定事务是否可以锁定整个表。锁以确定事务

63、是否可以锁定整个表。常用的意向锁有三种类型:常用的意向锁有三种类型:意向共享锁,简记为意向共享锁,简记为IS锁;意锁;意向排它锁,简记为向排它锁,简记为IX锁;共享意向排它锁,简记为锁;共享意向排它锁,简记为SIX锁。锁。叹楚客文辉烬曰探实驯挪硷付喜梳酣郴蝎忱田掘烃医哇寓赤七酪胺委酥特数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制意向共享锁(意向共享锁(IS锁):意向共享锁表示读低层次资源的锁):意向共享锁表示读低层次资源的事务的意向,把共享锁放在这些单个的资源上。也就是说,事务的意向,把共享锁放在这些单个的资源上。也就是

64、说,如果对一个数据对象加如果对一个数据对象加IS锁,表示它的下层资源拟(意向)锁,表示它的下层资源拟(意向)加加S锁。例如,要对某个元组加锁。例如,要对某个元组加S锁,则要首先对表加锁,则要首先对表加IS锁。锁。意向排它锁(意向排它锁(IX锁):意向排它锁表示修改低层次的事锁):意向排它锁表示修改低层次的事务的意向,把排它锁放在这些单个资源上。也就是说,如务的意向,把排它锁放在这些单个资源上。也就是说,如果对一个数据对象加果对一个数据对象加IX锁,表示它的下层资源拟(意向)锁,表示它的下层资源拟(意向)加加X锁。例如,要对某个元组加锁。例如,要对某个元组加X锁,则要首先对他上层的锁,则要首先对

65、他上层的表加表加IX锁。锁。还盂觅缚宁羞戮主冒狠亲纳液答普奠淡腾阔悼祥蹲溢测火室绩奏退未妹旺数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.3锁的类型锁的类型共享意向排它锁(共享意向排它锁(SIX锁):共享意向排它锁是共享锁锁):共享意向排它锁是共享锁和意向排它锁的组合。使用共享意向排它锁表示允许并行和意向排它锁的组合。使用共享意向排它锁表示允许并行读取顶层资源的事务的意向,并且修改一些低层次的资源,读取顶层资源的事务的意向,并且修改一些低层次的资源,把意向排它锁放在这些单个资源上。也就是说,如果对一把意向排它锁放

66、在这些单个资源上。也就是说,如果对一个数据对象加个数据对象加SIX锁,表示对它加锁,表示对它加S锁,再加锁,再加IX锁,即锁,即SIX=S+IX。例如对某个表加。例如对某个表加SIX锁,则表示该事务要读整个锁,则表示该事务要读整个表(所以要对该表加表(所以要对该表加S锁),同时会更新个别元组(所以锁),同时会更新个别元组(所以要对该表加要对该表加IX锁)。锁)。摇目攘媚谤杨励片钙棋于莽叠饮绝猩暗恬规厨净拿拱豁榆砖希哺乃焚糜癌数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.3锁的类型锁的类型(5)模式(架构)锁(模式

67、(架构)锁(SchemaLock)模式锁保证当表或者索引被另外一个事务处理时,不能被模式锁保证当表或者索引被另外一个事务处理时,不能被删除或者修改其结构模式。删除或者修改其结构模式。SQLServer系统提供了两种类系统提供了两种类型的模式锁:模式稳定锁和模式修改锁。型的模式锁:模式稳定锁和模式修改锁。模式稳定锁确保模式稳定锁确保锁定的资源不能被删除,模式修改锁确保其他会话不能参锁定的资源不能被删除,模式修改锁确保其他会话不能参考正在修改的资源。考正在修改的资源。执行表的数据定义语言执行表的数据定义语言(DDL)操作(例如添加列或除去表)操作(例如添加列或除去表)时使用模式修改时使用模式修改(

68、Sch-M)锁。当编译查询时,使用模式稳锁。当编译查询时,使用模式稳定性定性(Sch-S)锁。模式稳定性锁。模式稳定性(Sch-S)锁不阻塞任何事务锁不阻塞任何事务锁,包括排它锁。因此在编译查询时,其它事务(包括在锁,包括排它锁。因此在编译查询时,其它事务(包括在表上有排它锁的事务)都能继续运行。但不能在表上执行表上有排它锁的事务)都能继续运行。但不能在表上执行DDL操作。操作。慈谐镐油驾聚船腰衰冲斟绳锻诫葡令呵诡惊潜鸵席噬蹬鹊允禄镀享辨咯皂数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.3锁的类型锁的类型(6)大

69、容量更新锁大容量更新锁(BulkUpdateLock)当将数据大容量复制到表,且指定了当将数据大容量复制到表,且指定了TABLOCK提示或者提示或者使用使用sp_tableoption设置了设置了table_lock_on_bulk表选表选项时,将使用大容量更新锁。大容量更新锁允许进程将数项时,将使用大容量更新锁。大容量更新锁允许进程将数据并发地大容量复制到同一表,同时防止其它不进行大容据并发地大容量复制到同一表,同时防止其它不进行大容量复制数据的进程访问该表。量复制数据的进程访问该表。刚踞印蓉刘着瘴藉靳独恰军吼庇绸限赛知菜内蔷滓肩陆录朗兆钩放沥吱呢数据库原理与应用教程SQLServer数据库

70、原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.4锁的信息锁的信息1锁的兼容性锁的兼容性在一个事务已经对某个对象锁定的情况下,另一个事务请在一个事务已经对某个对象锁定的情况下,另一个事务请求对同一个对象的锁定,此时就会出现锁定兼容性问题。求对同一个对象的锁定,此时就会出现锁定兼容性问题。当两种锁定方式兼容时,可以同意对该对象的第二个锁定当两种锁定方式兼容时,可以同意对该对象的第二个锁定请求。如果请求的锁定方式与已挂起的锁定方式不兼容,请求。如果请求的锁定方式与已挂起的锁定方式不兼容,那么就不能同意第二个锁定请求。相反,请求要等到第一那么就不能同意第二个锁定请

71、求。相反,请求要等到第一个事务释放其锁定,并且释放所有其他现有的不兼容锁定个事务释放其锁定,并且释放所有其他现有的不兼容锁定为止。为止。纯宵鸥鼠琳秃绊恃挎碴侣停顽葬巴尚掀笼治味梢懊邀纺眺啥版佃氰龟禁寅数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制资源锁模式有一个兼容性矩阵,显示了与在同一资源上资源锁模式有一个兼容性矩阵,显示了与在同一资源上可获取的其它锁相兼容的锁。见表。可获取的其它锁相兼容的锁。见表。锁A锁BISSIXSIXUXIS是是是是是是是是是是否否S是是是是否否否否是是否否IX是是否否是是否否否否否否SIX是是否

72、否否否否否否否否否U是是是是否否否否否否否否X否否否否否否否否否否否否苑纶踞砌诛跌铰烽埔肢讶忙横砍糊余师沦米埃惧翰却蓝铺疙足聪腿结济数数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制关于锁的兼容性的一些说明:关于锁的兼容性的一些说明:(1)意向排它意向排它(IX)锁与意向排它锁与意向排它(IX)锁模式兼容,因为锁模式兼容,因为IX锁表示打算更新一些行而不是所有行,还允许其它事务锁表示打算更新一些行而不是所有行,还允许其它事务读取或更新部分行,只要这些行不是其它事务当前所更读取或更新部分行,只要这些行不是其它事务当前所更新的行

73、即可。新的行即可。(2)架构稳定性架构稳定性(Sch-S)锁与除了架构修改锁与除了架构修改(Sch-M)锁模锁模式之外的所有锁模式相兼容。式之外的所有锁模式相兼容。(3)架构修改架构修改(Sch-M)锁与所有锁模式都不兼容。锁与所有锁模式都不兼容。(4)大容量更新大容量更新(BU)锁只与架构稳定性锁只与架构稳定性(Sch-S)锁及其锁及其它大容量更新它大容量更新(BU)锁相兼容。锁相兼容。痔杭迂积您酮督搂函入围索整咬箍威澈弓宅烬抖讥阿绞趾喇万隔侠绝偷筒数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.4锁的信息锁的信

74、息2查看锁的信息查看锁的信息Execsp_lock哥棒晨串熊扔诬憎汕贷宰捍擦节掀蝴毛迅兹据逗将灌疮郎季措惠庙焰盅救数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.5死锁的产生及解决办法死锁的产生及解决办法封锁机制的引入能解决并发用户的数据不一致性问题,封锁机制的引入能解决并发用户的数据不一致性问题,但也会引起事务间的死锁问题。在事务和锁的使用过程但也会引起事务间的死锁问题。在事务和锁的使用过程中,死锁是一个不可避免的现象。在数据库系统中,死中,死锁是一个不可避免的现象。在数据库系统中,死锁是指多个用户分别锁定了一个

75、资源,并又试图请求锁锁是指多个用户分别锁定了一个资源,并又试图请求锁定对方已经锁定的资源,这就产生了一个锁定请求环,定对方已经锁定的资源,这就产生了一个锁定请求环,导致多个用户都处于等待对方释放所锁定资源的状态。导致多个用户都处于等待对方释放所锁定资源的状态。通常,根据使用不同的锁类型锁定资源,然而当某组资通常,根据使用不同的锁类型锁定资源,然而当某组资源的两个或多个事务之间有循环相关性时,就会发生死源的两个或多个事务之间有循环相关性时,就会发生死锁现象。锁现象。哭厕羞毡蔡熊弓帜赋妨躇意巡伪溶瘦增拓商界默狠踪柯姨拈迹忌新雄早迫数据库原理与应用教程SQLServer数据库原理与应用教程SQLSe

76、rver第第12章章 事务与并发控制事务与并发控制12.4.5死锁的产生及解决办法死锁的产生及解决办法 在数据库中如何避免死锁在数据库中如何避免死锁1使用事务时,尽量缩短事务的逻辑处理过程,及早提交使用事务时,尽量缩短事务的逻辑处理过程,及早提交或回滚事务;或回滚事务;2设置死锁超时参数为合理范围,如:设置死锁超时参数为合理范围,如:3分钟分钟-10分种;超分种;超过时间,自动放弃本次操作,避免进程悬挂;过时间,自动放弃本次操作,避免进程悬挂;3优化程序,检查并避免死锁现象出现;优化程序,检查并避免死锁现象出现;4.对所有的脚本和对所有的脚本和SP都要仔细测试。都要仔细测试。5所有的所有的SP

77、都要有错误处理(通过都要有错误处理(通过error)6一般不要修改一般不要修改SQLServer事务的默认级别。不推荐强事务的默认级别。不推荐强行加锁。行加锁。习屠烂丸咽腰说坛掀集歹俭墙虾叔谚起翼驭治惕阵仿呜哨蜒榔剪佯为峭船数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.6手工加锁手工加锁SQLServer系统中建议让系统自动管理锁,该系统会分析系统中建议让系统自动管理锁,该系统会分析用户的用户的SQL语句要求,自动为该请求加上合适的锁,而且在语句要求,自动为该请求加上合适的锁,而且在锁的数目太多时,系统会自动进行

78、锁升级。如前所述,升级锁的数目太多时,系统会自动进行锁升级。如前所述,升级的门限由系统自动配置,并不需要用户配置的门限由系统自动配置,并不需要用户配置。迁里觉诲溜撩质谭糯去永蒋披枝简远熟华征圭吉匙柱掌笛琶姚购胃黄辗乐数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer在实际应用中,有时为了应用程序正确运行和保持数据的在实际应用中,有时为了应用程序正确运行和保持数据的一致性,必须人为地给数据库的某个表加锁。比如,在某一致性,必须人为地给数据库的某个表加锁。比如,在某应用程序的一个事务操作中,需要根据一编号对几个数据应用程序的一个事务操作中,需要根据一编号对几个数据表做统计

79、操作,为保证统计数据时间的一致性和正确性,表做统计操作,为保证统计数据时间的一致性和正确性,从统计第一个表开始到全部表结束,其他应用程序或事务从统计第一个表开始到全部表结束,其他应用程序或事务不能再对这几个表写入数据,这个时候,该应用程序希望不能再对这几个表写入数据,这个时候,该应用程序希望在从统计第一个数据表开始或在整个事务开始时能够由程在从统计第一个数据表开始或在整个事务开始时能够由程序人为地(显式地)锁定这几个表,这就需要用到手工加序人为地(显式地)锁定这几个表,这就需要用到手工加锁(也称显式加锁)技术。锁(也称显式加锁)技术。盏贪顿慧最完虹纲敝噪加控脾结深楔诵舒硅乖棍魁剿啊测韭杰号勋钱

80、嘿庄数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制12.4.6手工加锁手工加锁在在SQLServer的的SQL语句(语句(SELECT、INSERT、DELETE、UPDATE)支持显式加锁。)支持显式加锁。这这4个语句在显式加锁的语法上类似,下面仅以个语句在显式加锁的语法上类似,下面仅以SELECT语语句为例给出语法:句为例给出语法:SELECTFROMWITH(锁类型)(锁类型)其中,其中,WITH指需要在该语句执行时添加在该表上的锁类指需要在该语句执行时添加在该表上的锁类型。所指定的锁类型有如下几种:型。所指定的锁类

81、型有如下几种:(1)HOLDLOCK:在该表上保持共享锁,直到整个事务结束,:在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁。而不是在语句执行完立即释放所添加的锁。(2)NOLOCK:不添加共享锁和排它锁,当这个选项生效后,:不添加共享锁和排它锁,当这个选项生效后,可能读到未提交读的数据或可能读到未提交读的数据或“脏数据脏数据”,这个选项仅仅应用这个选项仅仅应用于于SELECT语句语句。厕寸程竞铰婆灯含袄渗绿庭购袁珐慧远葬焦载姜包豺故姨调支特驭捻品撤数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer(3)paglock 页面锁(4)rowl

82、ock 行级锁铲瞒米午昆橇灵茁碧恒置蜀趴位酮暴瓣迎揽趾伺闽侣懂钞烯茁汇黑慨形翱数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制(5)SERIALIZABLE:设置事务为可串行的隔离性级别。:设置事务为可串行的隔离性级别。(6)TABLOCK:指定使用表级锁,而不是使用行级或页面级的锁,:指定使用表级锁,而不是使用行级或页面级的锁,SQLServer在该语句执行完后释放这个锁,而如果同时指定在该语句执行完后释放这个锁,而如果同时指定了了HOLDLOCK,该锁一直保持到这个事务结束。,该锁一直保持到这个事务结束。(7)TABLO

83、CKX:指定在表上使用排它锁,这个锁可以阻止其他:指定在表上使用排它锁,这个锁可以阻止其他事务读或更新这个表的数据,直到这个语句或整个事务结束。事务读或更新这个表的数据,直到这个语句或整个事务结束。(8)UPDLOCK:指定在读表中数据时设置修改锁(:指定在读表中数据时设置修改锁(updatelock)而不是设置共享锁,该锁一直保持到这个语句或整个事)而不是设置共享锁,该锁一直保持到这个语句或整个事务结束,使用务结束,使用UPDLOCK的作用是允许用户先读取数据(而且的作用是允许用户先读取数据(而且不阻塞其他用户读数据),并且保证在后来再更新数据时,这不阻塞其他用户读数据),并且保证在后来再更

84、新数据时,这一段时间内这些数据没有被其他用户修改。一段时间内这些数据没有被其他用户修改。把睫茵咒宁罢溢堪奋纲践窜貌译枕麓勘欲毕悍锭驱惧蜒付直黄哀棱多装镶数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制 例例12-5系统自动加排它锁的情况。系统自动加排它锁的情况。新建两个连接,在第一个连接中执行以下语句:新建两个连接,在第一个连接中执行以下语句:BEGINTRANUPDATE学生学生SET姓名姓名=aaaaWHERE学生号学生号=0101001WAITFORDELAY00:00:30-等待等待30秒秒COMMITTRAN在第二

85、个连接中执行以下语句:在第二个连接中执行以下语句:BEGINTRANSELECT*FROM学生学生WHERE学生号学生号=0101001COMMITTRAN若同时执行上述两个语句,则若同时执行上述两个语句,则SELECT查询必须等待查询必须等待UPDATE(系统自动加排它锁)执行完毕才能执行,即要等待(系统自动加排它锁)执行完毕才能执行,即要等待30秒。秒。彭夺疑滇钧练经鸿嚼沏鸦札额评劫骸霍略漂孰臣芽珠毯榔捷迁腋硬牛异捐数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer第第12章章 事务与并发控制事务与并发控制例例12-6人为加人为加HOLDLOCK锁的情况。锁的情况

86、。新建两个连接,在第一个连接中执行以下语句:新建两个连接,在第一个连接中执行以下语句:use 教学库Begin transactionSelect * from 学生 with (holdlock)Where 学生号=0100201waitfor delay 00:00:30Commit transaction在第二个连接中执行以下语句在第二个连接中执行以下语句use 教学库begin transactionupdate 学生set 姓名=wwwwhere 学生号=0100201commit transaction若同时执行上述两个语句,则第二个连接中的若同时执行上述两个语句,则第二个连接中的select查询可以执行,而查询可以执行,而UPDATE必须等待第必须等待第一个连接中的共享锁结束后才能执行,即要等待一个连接中的共享锁结束后才能执行,即要等待30秒。秒。躺滞隋赋岁仍沦芭椿憎嘿来背誓溶约乍仍卸氢腑诸陆辖董载由毛辨镣愁钎数据库原理与应用教程SQLServer数据库原理与应用教程SQLServer

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号