- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章 (续)事务
数据库原理与SQL Server 2000 第10章 (续)事务 保证数据完整性—事务 问题:如果在修改了数据库中的数据之后又立即意识到不该做这些修改,应该怎样处理? 最简单的办法,就是重新输入这些数据。但是,如果已经修改了多个表中的一些数据时,想要重新输入,就比较困难了。 另一种方法是自动地将数据恢复到它们修改之前的原始状态。为了解决这样的问题,SQL Server 2000提供了事务和锁来保证数据的一致性和完整性。 事务的属性 事务是构成单一逻辑单元的操作的集合。 事务必须满足4个要求,称为ACID属性,即原子性、一致性、隔离性和持久性。 一个简单的事务例子 银行转账:事务T从A帐户过户100元到B帐户 READ(A) A=A-100 WRITE(A) READ(B) B=B+100 WRITE(B) 1. 原子性 如果事务成功,SQL Server 2000确保在事务中所有的数据修改作为一个整体。如果事务没有成功,就不会有任何修改发生。也就是说,SQL Server 2000能确保事务的原子性。事务要想取得成功,事务中的每一个操作(语句)都必须成功。如果其中的任何一个操作失败了,则整个事务就会失败,而且自事务开始所做的任何修改都会被撤销。 2. 一致性 SQL Server 2000能保证事务的一致性。一致性意味着全部数据都保持在一致的状态。在一个事务开始之前,数据库处于一致的状态,当事务结束后,不管它是成功还是失败,数据库还应该处于一致的状态。 3. 隔离性 如果有两个或者多个事务,这些事务必须按照一定的顺序先后执行,而不能在执行一个事务的同时,又穿插执行另外的一个事务,也就是说,多事务并发执行时,应保证执行的结果是正确的,如同单用户环境一样。这可以通过锁来实现。 4. 永久性 事务一旦完成,它对数据库所进行的修改将被永久保存,即使以后系统发生故障,也应该保留这个事务执行的痕迹。 SQL Server 2000的事务分为显式事务、隐式事务、自动事务。 显式事务 显式事务就是用户使用“事务处理语句”定义的事务。 事务处理语句主要包括: (1)BEGIN TRAN[SACTION] 作用是启动一个事务,它标志着一个事务的开始。 (2)COMMIT TRAN[SACTION] 作用是提交事务。在事务中对数据库所做的修改,将在此时进行提交,它标志着事务的结束。 (3)ROLLBACK TRAN[SACTION] 作用是回滚事务。通常如果在事务的执行过程中发生了错误,需要执行这个语句,放弃事务中对数据库所做的修改,使数据库恢复到事务开始之前的状态。 例10-2 提交事务。 脚本: 例10-3 回滚事务。 脚本: 隐式事务 (1)SET IMPLICIT_TRANSACTION ON。 使SQL Server 2000进入隐式事务处理模式,使用COMMIT TRANSACTION/WORK语句提交事务,或者使用ROLLBACK TRANSACTION/WORK回滚事务。 (2)SET IMPLICIT_TRANSACTION OFF。 退出隐式事务处理模式。 例9-4 隐式事务实例。 脚本: 自动事务 自动事务是SQL Server 2000默认的事务处理模式在这种模式下,如果任何一个语句执行成功,则它对数据库所做的修改马上被自动提交,反之如果失败,则自动回滚。 使用事务时的注意事项 (1)事务应尽可能短。 (2)定义有效的锁策略。 锁可以防止用户读取已经被修改但还没有提交的数据。 (3)避免用户在事务中输入数据。 (4)在浏览数据时避免打开事务。 这有助于减少锁定问题。除此之外,事务的最大作用在于修改数据,而不是检索数据。 (5)减少事务中所访问的数据量。 事务处理中往往会锁定数据,因此能够减少其他用户可能遇到的锁问题,提高数据库的并发性。 维护数据一致性—锁 SQL Server 2000使用锁来防止多个用户在同一时间内对同一数据进行修改,并能防止一个用户查询正在被另一个用户修改的数据,防止可能发生的数据混乱。锁有助于保证数据库逻辑上的一致性。 锁的类型 (1)排它锁:不允许读取、修改锁定资源。 (2)共享锁:允许读取锁定资源。 (3)更新锁:锁定资源。 锁的粒度 根据不同的情况,SQL Server 2000中的锁可以灵活地运用在不同的资源层次(也就是粒度)上。锁的粒度越大,被锁定的数据越多,数据的并行性就越低
文档评论(0)