Ch06-事务、锁、索引和数据完整性.ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络数据库开发技术 事务、锁、索引与数据完整性 事务 事务 事务的概念 事务是并发控制的基本单位。所谓事务,就是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。 事务的特性 原子性:对数据的修改,要么都完成,要么都取消。 一致性:事务完成时,保持数据的一致性、完整性。 隔离性:并行事务之间相互隔离。 持久性:事务完成后,对数据所做的所有修改就保 存到数据库中。 事务 SQL Server以下列事务模式运行。 (1)自动提交事务 每条单独的语句都是一个事务。 (2)显式事务 每个事务均以BEGIN TRANSACTION语句显式开始,以COMMIT或ROLLBACK语句显式结束。 (3)隐式事务 在前一个事务完成时新事务隐式启动,但每个事务仍以COMMIT或ROLLBACK语句显式完成。 (4)批处理级事务 只能应用于多个活动结果集(MARS),在MARS会话中启动的Transact-SQL显式或隐式事务变为批处理级事务。 事务的使用 事务控制语句  ?BEGIN TRAN | TRANSACTION [tran_name]:标识一个用户定义的事务的开始。tran_name为事务的名字 ?COMMIT TRAN [tran_name]:表示提交事务中的一切操作,结束一个用户定义的事务。使得对数据库的改变生效。 ? ROLLBACK TRAN [tran_name|save_name]:回退一个事务到事务的开头或一个保存点。表示要撤消该事务已做的操作,回滚到事务开始前或保存点前的状态。 ? SAVE TRAN save_name:在事务中设置一个保存点。它可以使一个事务内的部分操作回退。 事务中使用的全局变量 事务控制语句 事务使用示例 [例]使用事务向表book中插入数据。 USE jwgl BEGIN TRAN tran_exam INSERT INTO book ( book_id , book_name , publish_company) VALUES ( dep04_s006_01‘ , VFP程序设计‘ , 南京大学出版社‘ ) SAVE TRAN int_point INSERT INTO book ( book_id , book_name , publish_company ) VALUES ( dep04_s006_02‘ , VFP实验指导书‘ , 东南大学出版社‘ ) 事务中不可使用的语句(不能够撤消) 锁 锁 锁的概念 锁定是Microsoft SQL Server Database Engine用来同步多个用户同时对同一个数据块的访问的一种机制。 锁的类型 Microsoft SQL Server Database Engine使用不同的锁模式锁定资源,这些锁模式确定了并发事务访问资源的方式。 (1)共享锁(S锁) 共享允许并发事务读取 (SELECT) 一个资源。资源上存在共享锁时,任何其它事务都不能修改数据。一旦已经读取数据便立即释放资源上的共享锁。 (2)排它锁(X锁) 排它锁可以防止并发事务对资源进行访问。其它事务不能读取或修改排它 (X) 锁锁定的数据。 (3)更新锁(U锁) 它可以防止常见的死锁。更新锁用来预定要对资源施加X锁,它允许其他事务读,但不允许再施加U锁或X锁。 锁 (4)意向锁 数据库引擎使用意向锁来保护共享锁(S锁)或排他锁(X锁),放置在锁层次结构的底层资源上。 (5)架构锁 执行表的数据定义语言(DDL)操作(例如添加列或删除列)时使用架构修改锁(Sch-M锁)。在架构修改锁(Sch-M锁)起作用的期间,会防止对表的并发访问。 (6)大容量更新锁 当将数据大容量复制到表,且指定了TABLOCK提示或者使用sp_tableoption设置了table lock on bulk表选项时,将使用大容量更新锁(BU锁)。 (7)键范围锁 在使用可序列化事务隔离级别时,对于Transact-SQL语句读取的记录集,键范围锁可以隐式保护该记录集中包含的行范围。 死锁 在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁。 除非某个外部进程断开死锁,否则死锁中的两个事务都将无限期等待下去。 尽管死锁不能完全避免,但遵守以下特定的编码惯例可以将

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档