欢迎来到天天文库
浏览记录
ID:45135358
大小:379.50 KB
页数:26页
时间:2019-11-10
《第10章 (续)事务》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数据库原理与SQLServer2000第10章(续)事务保证数据完整性—事务问题:如果在修改了数据库中的数据之后又立即意识到不该做这些修改,应该怎样处理?最简单的办法,就是重新输入这些数据。但是,如果已经修改了多个表中的一些数据时,想要重新输入,就比较困难了。另一种方法是自动地将数据恢复到它们修改之前的原始状态。为了解决这样的问题,SQLServer2000提供了事务和锁来保证数据的一致性和完整性。事务的属性事务是构成单一逻辑单元的操作的集合。事务必须满足4个要求,称为ACID属性,即原子性、一致性、隔离性和持久性。一个简单的事务例子银
2、行转账:事务T从A帐户过户100元到B帐户READ(A)A=A-100WRITE(A)READ(B)B=B+100WRITE(B)1.原子性如果事务成功,SQLServer2000确保在事务中所有的数据修改作为一个整体。如果事务没有成功,就不会有任何修改发生。也就是说,SQLServer2000能确保事务的原子性。事务要想取得成功,事务中的每一个操作(语句)都必须成功。如果其中的任何一个操作失败了,则整个事务就会失败,而且自事务开始所做的任何修改都会被撤销。2.一致性SQLServer2000能保证事务的一致性。一致性意味着全部数据都保
3、持在一致的状态。在一个事务开始之前,数据库处于一致的状态,当事务结束后,不管它是成功还是失败,数据库还应该处于一致的状态。3.隔离性如果有两个或者多个事务,这些事务必须按照一定的顺序先后执行,而不能在执行一个事务的同时,又穿插执行另外的一个事务,也就是说,多事务并发执行时,应保证执行的结果是正确的,如同单用户环境一样。这可以通过锁来实现。4.永久性事务一旦完成,它对数据库所进行的修改将被永久保存,即使以后系统发生故障,也应该保留这个事务执行的痕迹。SQLServer2000的事务分为显式事务、隐式事务、自动事务。显式事务显式事务就是用户
4、使用“事务处理语句”定义的事务。事务处理语句主要包括:(1)BEGINTRAN[SACTION]作用是启动一个事务,它标志着一个事务的开始。(2)COMMITTRAN[SACTION]作用是提交事务。在事务中对数据库所做的修改,将在此时进行提交,它标志着事务的结束。(3)ROLLBACKTRAN[SACTION]作用是回滚事务。通常如果在事务的执行过程中发生了错误,需要执行这个语句,放弃事务中对数据库所做的修改,使数据库恢复到事务开始之前的状态。例10-2提交事务。脚本:例10-3回滚事务。脚本:隐式事务(1)SETIMPLICIT_T
5、RANSACTIONON。使SQLServer2000进入隐式事务处理模式,使用COMMITTRANSACTION/WORK语句提交事务,或者使用ROLLBACKTRANSACTION/WORK回滚事务。(2)SETIMPLICIT_TRANSACTIONOFF。退出隐式事务处理模式。例9-4隐式事务实例。脚本:自动事务自动事务是SQLServer2000默认的事务处理模式在这种模式下,如果任何一个语句执行成功,则它对数据库所做的修改马上被自动提交,反之如果失败,则自动回滚。例:updatescsetscore=score+15使用事务
6、时的注意事项(1)事务应尽可能短。(2)定义有效的锁策略。锁可以防止用户读取已经被修改但还没有提交的数据。(3)避免用户在事务中输入数据。(4)在浏览数据时避免打开事务。这有助于减少锁定问题。除此之外,事务的最大作用在于修改数据,而不是检索数据。(5)减少事务中所访问的数据量。事务处理中往往会锁定数据,因此能够减少其他用户可能遇到的锁问题,提高数据库的并发性。维护数据一致性—锁SQLServer2000使用锁来防止多个用户在同一时间内对同一数据进行修改,并能防止一个用户查询正在被另一个用户修改的数据,防止可能发生的数据混乱。锁有助于保证
7、数据库逻辑上的一致性。锁的类型(1)排它锁:不允许读取、修改锁定资源。(2)共享锁:允许读取锁定资源。(3)更新锁:锁定资源。锁的粒度根据不同的情况,SQLServer2000中的锁可以灵活地运用在不同的资源层次(也就是粒度)上。锁的粒度越大,被锁定的数据越多,数据的并行性就越低。锁的粒度可以分为以下几种。(1)RID行标识符:锁定表中的单行数据。(2)键值:锁定索引中的单行数据。(3)页面:锁定一个数据页面或者索引页面,页面的大小为8KB。(4)区域:锁定一组连续的数据页面或者索引页面。(5)表:锁定整个表。(6)数据库:锁定整个数据
8、库。死锁在多用户环境中,当多个用户分别锁定不同的资源,而又在等待其他用户释放已锁定资源时,有可能出现无限制等待的情况,称为死锁。设置事务优先级语句的语法格式为:SETDEADLOCK_PRIORITY{lo
此文档下载收益归作者所有