欢迎来到天天文库
浏览记录
ID:27801981
大小:149.01 KB
页数:10页
时间:2018-12-06
《数据库原理与运用之事务控制与并发处理》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、第13章事务控制与并发处理13.1事物概述数据库系统是面向多用户的。一个基木问题是,多个用户同时访问数据库的情况下如何保证数据的一致性和有效性?事务控制与并发处理为此类问题的解决提供了一种有效的途径。事务是数据库并发控制技术涉及的棊木概念,是并发控制的基木单位。13.1.1什么是事务事务(Tgnsaction)是指作为单个逻辑工作单元执行的一系列数据库操作。一•个事务内的所有语句被作为整体执行,耍么全部执行,要么全部不执行。遇到错误吋,可以回滚事务,取消事务内所做的所有改变,从而保证数据库屮数据的一致性和可恢复性。例如:对于银行转帐问题,将帐号A1上的金额x转入帐号A
2、2。如何保证帐号信息的是正确的?13.1.2事务的特性一个逻辑工作单元要成为事务,必须满足所谓的ACID(原了性、一致性、隔离性和持久性)属性。•原子性(Atomicity):事务是数据库操作的逻辑工作单位。就操作而言,事务中的操作是一个整体,不能再被分割,要么全部成功执行,要么全部不成功执行。•一致性(Consistency):事务一致性是指事务执行前后都能够保持数据库状态的一致性,即事务的执行结果是将数据库从一个一致性状态变到另一个一致性状态。•隔离性(Isolation):隔离性是指多个事务在执行时不互相干扰。事务具有隔离性意味着-•个事务的内部操作即其使用的数
3、据库对其他事务是不透明的,英他事务不会干扰这些操作和数据。•持续性(Durability):指事务一旦提交,则-其対数据库中数据的改变就应该是永久的,即使是出现系统故障等问题。事务开始Z后,事务所冇的操作都陆续写到事务口志中。这些任务操作在事务LI志中记录一个标志,用于表示执行了这种操作,当取消这种事务时,系统白动执行这种操作的反操作,保证系统的一致性。系统自动牛成-•个检查点机制,这个检查点周期地发牛。检查点的周期是系统根据用户定义的时间间隔和系统活动的频度由系统口动计算出来的时间间隔。检杏点周期地检杏事务I」志,如果在事务II志屮,事务全部完成,那么检杳点将事务提
4、交到数据库中,并且在事务FI志小做一个检查点提交标记。如果在事务FI志小,事务没有完成,那么检查点将事务日志中的事务不提交到数据库中,并且在事务th忐屮做一个检查点未提交标记。13.1.3事务和批的差别编程时,一•定要区分事务和批的差别:1.批是一组整体编译的SQL语句,事务是一组作为单个逻辑工作单元执行的SQL语句。2.批语句的组合发生在编译时刻,事务中语句的组合发生在执行时刻。3.当在编译时,批屮某个语句存在语法错误,系统将取消整个批中所有语句执行,而在运行时刻,如果事务中某个数据修改违反约束、规则等,系统默认只回退到产生该错误的语句。1.如果批中产生一个运行时错
5、误,系统默认只回退到产生该错误的语句。但当打开XACT_ABORT选项为ON时",可以系统自动回滚产生该错误的当前事务。一个事务中也可以拥有多个批,一个批里可以有多个SQL语句组成的事务,事务内批的多少不影响事务的提交或回滚操作。13.1.4事务的类型根据事务的设置、用途的不同,SQLServer2005将事务分为多种类型。1・根据系统的设置分类根据系统的设置,SQLServer2005将事务分为两种类型:系统提供的事务和用户定义的事务,分别简称为系统事务和用户定义事务。(1)系统事务系统提供的事务是指在执行某些语句时,-条语句就是一个事务。但是要明确,一条语句的对彖
6、既门J能是表中的一行数据,也可能是表中的多行数据,甚至是表中的全部数据。因此,只有一条语句构成的事务也可能包含了多行数据的处理。系统提供的事务语句如下:ALTERTABLE、CREATE>DELETE>DROP、FETCH、GRANT、INSERT>OPEN、REBOKE、SELECT、UPDATE、TRUNCATETABLE这些语句本身就构成了一个事务。【例1】使用CREATETABLE创建一个表。CREATETABLEstudent(idCHAR(10),nameCHAR(6),sexCHAR(2))说明:这条语句木身就构成了一个事务。这条语句由于没冇使用条件限制
7、,那么这条语句就是创建包含3个列的表。要么创建全部成功,要么全部失败。(2)用户定义事务在实际应用中,大多数的事务处理釆用了用户定义的事务来处理。在开发应用程序吋,可以使川BEGINTRANSACTION语句來定义明确的川户定义的事务。在使川川户定义的事务时,一定要注意事务必须有明确的结束语句來结束。如果不使用明确的结束语句來结束,那么系统可能把从事务开始到用八关闭连接之间的全部操作都作为一个事务来对待。事务的明确结束可以使用两个语句中的一个:COMMIT语句和ROLLBACK语句。COMMIT语句是提交语句,将全部完成的语句明确地提交到数据库屮。R
此文档下载收益归作者所有