欢迎来到天天文库
浏览记录
ID:45136364
大小:754.00 KB
页数:18页
时间:2019-11-10
《第13章 事务和锁定》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第13章事务和锁定讲师姓名第13章事务和锁定事务概述1事务还原2事务锁定313.1事务概述事务是用于将多个语句合并为一个整体并使这个整体具有不可分割,同进同退的特性。在一个事务内部的语句,要么一个都不做,要么全部做完,这保证了数据在逻辑上的一致性,使得许多现实中的交易得以顺利进行。13.1.1ACID属性事务是属于某个逻辑单元的一系列操作,这一系列操作具有四个属性,即ACID属性,分别为原子性(Atomicity也即不可分割性),一致性(Consistency),隔离性(Isolation),和耐久性(Durability)。13.1.1
2、ACID属性1.原子性原子性保证了事务的完整性。如前所述,事务是由一系列操作组成的,这些操作要么全部都做完,要么一个也不做。也就是说,只有当其中所有的操作都成功执行后这个事务才算是成功执行,若有一个操作执行失败,则将使得其它所有成功的操作都被取消。这就是事务的原子性。事务的原子性是非常具有其应用价值的,最典型和最普遍的莫过于银行交易,只有当用户所有操作做完确认后整个交易才算完成,否则将取消这笔交易。若不采用事务,则有可能出现这样的情况:用户在ATM上取钱,交易刚将用户账户上的那部分额度减去正准备出款,此时突然停电,系统停止。当重新启动系统
3、时用户会发现尽管自已账户上的金额减少了,但却并没有拿到这部分钱。而如果采用了事务,则可以将“出款”和“减额”这两个操作放在同一个事务中,用户若没取到钱绝不会出现账户上金额减少的问题。13.1.1ACID属性2.一致性一致性的意思是指无论在交易开始还是交易结束,所有数据都是处于同一状态。交易成功则所有数据处于交易结束状态,交易失败则所有数据处于效易开始状态,而不会出现一个数据处于交易开始的状态而另一个数据却处于交易结束状态。3.隔离性隔离性是指一个事务与其它同时发生的事务是不相互影响的。也就是说当一个事务发生时,看起来好像是只有它一个事务在
4、运行一样。在事务A要用到事务B可能要操作的数据时,事务A只会使用在事务B发生之前或发生之后的数据,而不会使用处于事务B发生后还没有完成时期的数据。13.1.1ACID属性持久性是指事务一但认可,对系统就形成了一个永久的结果,就算系统出现故障了这种结果也不会丢失。在SQLServer中进行事务处理时,将会利用事务日志的机制,系统首在事务开始时做一个标志,只有当事务确认了以后才认为交易结束,这样就可以确保在系统故障时的交易有效性。13.1.2事务的几种模式模式1:自动提交模式自动提交是SQL中默认的事务提交模式。它是将每一条语句作为一个事务,
5、当每个语句完成后提交事务。比如,在默认环境下,下面的语句自成一个事务。在修改数据后,由这条语句形成的事务自动提交。自动认可模式是很有用的模式,用户不必关心明确的开始或结束。自动提交模式将默认执行,直到遇到显式的事务开始语句或设定了隐式模式后遇到隐式启动事务的语句为止。13.1.2事务的几种模式显式是指采用专门的语句开始启动事务的模式。显式常用于应用程序存储过程或触发器这些序列化的指令中。显式事务用以下语句进行指定和控制:BEGINTRANSACTION表示事务的开始,同时也表示显式事务开始。COMMITTRANSACTION或COMMIT
6、WORK显示事务的结束,如果在事务开始后没有出现错误,可以用该语句结束事务,并提交,这样,该次事务中的所有数据修改在数据库中都将永久有效。事务占用的资源也将被释放。ROLLBACKTRANSACTION或ROLLBACKWORK当显示事务开始后遇到错误,则可以用该语句来处理遇到错误的事务。该事务修改的所有数据都返回到事务开始时的状态。事务占用的资源将被释放。开始一个事务的语法如下:13.1.2事务的几种模式模式3:隐式隐式是指在这种模式下,一些语句它即不是自动提交模式那样每条语句作为一个事务提交一次,也不是显性地指定BEGINTRANSA
7、CTION来开始事务。它是一些特定的语句,这些语句一旦使用,则事务开始,直到显示地结束或用户断线为止。启动隐式事务模式的语法为:SETIMPLICIT_TRANSACTIONS{ON
8、OFF}设置为ON时,SETIMPLICIT_TRANSACTIONS将启动隐性事务模式。设置为OFF时,则返回到自动提交事务模式。下面为使用隐式事务的例子:13.1.3事务的相关信息1.@@TRANCOUNT@@TRANCOUNT代表了当前连接的活动事务数量。当开始一个事务时,它自动加1,回滚整个事务将使此值减1,但如果回滚至保存点则此值不变。2事务中不允
9、许的语句在一个事务中不允许有下面的语句存在,不论是显式事务还是隐式事务。RESTORELOGDUMPTRANSACTIONUPDATESTATISTICSDROPDATABASERESTORE
此文档下载收益归作者所有