第09章事务和锁课件

上传人:我*** 文档编号:140629904 上传时间:2020-07-31 格式:PPT 页数:40 大小:362KB
返回 下载 相关 举报
第09章事务和锁课件_第1页
第1页 / 共40页
第09章事务和锁课件_第2页
第2页 / 共40页
第09章事务和锁课件_第3页
第3页 / 共40页
第09章事务和锁课件_第4页
第4页 / 共40页
第09章事务和锁课件_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《第09章事务和锁课件》由会员分享,可在线阅读,更多相关《第09章事务和锁课件(40页珍藏版)》请在金锄头文库上搜索。

1、第09章 事务和锁,内容提要 事务是由一系列的数据操作命令组成,是数据库应用程序的基本逻辑单元。SQL Server 2005在对数据库进行操作时,通过事务来保证数据的一致性和完整性。 用户访问数据库时,经常出现并发的情况。数据库系统的并发处理能力是衡量其性能的重要标志之一。 数据库系统通过适当的并发控制机制协调并发操作,保证数据的一致性。在SQL Server 2005中,以事务为基本操作单位,使用锁来实现并发控制。,第09章 事务和锁,9.1 事务概述 9.2 管理事务 9.3 管理并发数据访问 9.4 管理锁 9.5小结,9.1 事务概述,在计算机系统设计过程中,与一个商业事务相关的数据

2、必须保证可靠性、一致性和完整性,以符合实际的商业过程。 在SQL Server 2005中,通常由事务来完成相关操作,以确保多个数据的修改作为一个单元来处理。 事务(Transaction)是单个的工作单元。如果某一事务执行成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被还原。,9.1 事务概述,9.1.1 事务的特点 定义事务必须符合如下的典型特征。 原子性(Atomicity):事务包含的一系列数据操作是是一个整体。执行部分操作则数据会回滚到原来的状态。 一致性(Consistency) :事务执行完成后,将数据

3、库从一个一致状态转变到另一个一致状态,事务不能违背定义在数据库中的任何完整性检查。 隔离性(Isolation) :一一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰 持久性(Durability):要求一旦事务提交,那么对数据库所做的修改将是持久的,无论发生何种机器和系统故障,都不应该对其有任何影响。,9.1 事务概述,9.1.2事务的分类 任何对数据的修改都是在事务环境中进行的。按照事务定义的方式可以将事务分为系统定义事务和用户定义事务。SQL Server 2005支持3种事务模式分别对应上述两类事务:自动提交事务、显式事务和隐式事务。 (1)自

4、动提交事务。 SQL Server 2005将一切操作作为事务处理,它不会在事务以外更改数据。如果没有用户定义事务,SQL Server会自己定义事务,称为自动提交事务。每条单独的语句都是一个事务。 (2)显式事务。显式事务是指显式定义了启动和结束的事务。在实际应用中,大多数的事务是由用户来定义的。事务结束分为提交(COMMIT)和回滚(ROLLBACK)两种状态。,9.1 事务概述,9.1.2事务的分类 (3)隐式事务。 在隐式事务中,SQL Server在没有事务定义的情况下会开始一个事务,但不会像在自动提交模式中那样自动执行COMMIT或ROLLBACK语句,事务必须显式结束。Trans

5、act-SQL 脚本使用SET IMPLICIT_TRANSACTIONS ON / OFF语句可以启动/关闭隐式事务模式。 (4)分布式事务。一个比较复杂的环境,可能有多台服务器,那么要保证在多服务器环境中事务的完整性和一致性,就必须定义一个分布式事务。在分布式事务中,所有的操作都可以涉及对多个服务器的操作,当这些操作都成功时,那么所有这些操作都提交到相应服务器的数据库中,如果这些操作中有一条操作失败,那么这个分布式事务中的全部操作都被取消。,9.1 事务概述,9.1.2事务的分类 跨越两个或多个数据库的单个数据库引擎实例中的事务实际上也是分布式事务。该实例对分布式事务进行内部管理;对于用户

6、而言,其操作就像本地事务一样。 对于应用程序而言,分布式提交必须由事务管理器管理,以尽量避免出现因网络故障而导致事务由某些资源管理器成功提交,另一些资源管理器回滚的情况。通过准备阶段和提交阶段管理提交进程可避免这种情况,这称为两阶段提交。,9.2 管理事务,事务的基本操作包括启动、保存、提交或回滚等。 9.2.1 启动事务 1显式事务的定义 显式事务需要明确定义事务的启动。显式事务的定义格式如下: BEGIN TRAN | TRANSACTION transaction_name | tran_name_variable WITH MARK description ,例9.1 定义一个事务,将

7、teaching数据库的score表中所有选了c05109号课程的学生的分数加5分,并提交该事务。 程序代码如下: USE teaching GO DECLARE TranName VARCHAR(20); SELECT TranName = Add_Score; BEGIN TRAN TranName; UPDATE score SET final=final+5 WHERE courseno=c05109; COMMIT TRAN TranName; GO,例9.2 定义一个事务,将teaching数据库的score表中所有选了c05109号课程的学生的分数减5分,并提交该事务。 程序代码

8、如下: USE teaching GO BEGIN TRAN Subtract_Score WITH MARK NSubtract score of c05109; GO UPDATE score SET final=final-5 WHERE courseno=c05109; COMMIT TRAN Subtract_Score; GO,9.2 管理事务,9.2.1 启动事务 2隐式事务的定义 默认情况下,隐式事务是关闭的。使用隐式事务需先将事务模式设置为隐式事务模式。不再使用隐式事务时,要退出该模式。 SET IMPLICIT_TRANSACTIONS ON | OFF 需要注意的是:在使

9、用隐式事务时,不要忘记结束事务(提交或回滚)。由于不需要显式的定义事务的开始,事务的结束很容易被忘记,导致失误长期运行;在连接关闭时产生不必要的回滚;或者造成其他连接的阻塞问题。,9.2 管理事务,9.2.1 启动事务 2隐式事务的定义 例9.3 分别使用显式事务和隐式事务向表course中插入两条记录。 程序代码如下: -first part USE teaching GO SET NOCOUNT ON; SET IMPLICIT_TRANSACTIONS OFF; GO PRINT NTran count at start = + CAST(TRANCOUNT AS NVARCHAR(10

10、);,BEGIN TRANSACTION INSERT INTO course VALUES(c05141,WIN程序设计,选修,64,4.0); PRINT NTran count at 1st = + CAST(TRANCOUNT AS NVARCHAR(10); INSERT INTO course VALUES(c05142,WEB程序设计,选修,64,4.0); PRINT NTran count at 2nd = + CAST(TRANCOUNT AS NVARCHAR(10); COMMIT TRANSACTION GO - second part PRINT NSetting

11、IMPLICIT_TRANSACTIONS ON.; SET IMPLICIT_TRANSACTIONS ON; PRINT NUse implicit transactions.;,- No BEGIN TRAN needed here. INSERT INTO course VALUES(c05151,管理信息系统,选修,48,3.0); PRINT NTran count in 1st implicit transaction = + CAST(TRANCOUNT AS NVARCHAR(10); INSERT INTO course VALUES(c05152,电子商务,选修,48,3

12、.0); PRINT NTran count in 2nd implicit transaction = + CAST(TRANCOUNT AS NVARCHAR(10); GO COMMIT TRANSACTION; PRINT NTran count after implicit transaction = + CAST(TRANCOUNT AS NVARCHAR(10); SET IMPLICIT_TRANSACTIONS OFF; GO,9.2 管理事务,9.2.2 保存事务 为了提高事务执行的效率,或者进行程序的调试等,可以在事务的某一点处设置一个标记(保存点),这样当使用回滚语句时

13、,可以不用回滚到事务的起始位置,而是回滚到标记所在的位置即保存点。 保存点设置及使用格式: SAVE TRAN | TRANSACTION savepoint_name | savepoint_variable ROLLBACK TRANSACTION savepoint_name | savepoint_variable,例9.4定义一个事务,向course表中添加一条记录,并设置保存点。然后再删除该记录,并回滚到事务的保存点,提交事务。 程序代码如下: USE teaching GO BEGIN TRAN INSERT INTO course VALUES(c05139,统一建模语言UML

14、,选修,48,3.0); SAVE TRAN savepoint; DELETE FROM course WHERE courseno=c05139; ROLLBACK TRAN savepoint; COMMIT TRAN GO,9.2 管理事务,9.2.3 提交事务 提交事务标志着一个执行成功的隐式事务或显式事务的结束。事务提交后,自事务开始以来所执行的所有数据修改被持久化,事务占用的资源被释放。 COMMIT TRAN | TRANSACTION transaction_name | tran_name_variable,9.2 管理事务,9.2.4 回滚事务 回滚事务是指清除自事务的起

15、点或到某个保存点所做的所有数据修改。释放由事务控制的资源。 ROLLBACK TRAN | TRANSACTION transaction_name | tran_name_variable | savepoint_name | savepoint_variable ,9.2 管理事务,9.2.5 自动提交事务 SQL Server 2005在启动显式事务,或者隐性事务模式设置为打开之前,都将以自动提交模式进行操作。即:在未启动显式事务,或者回滚和关闭启动显式事务时,SQL Server为自动提交模式。在关闭隐性事务模式设置时,SQL Server 为自动提交模式。 在自动提交模式下,发生回滚

16、的操作内容取决于遇到的错误的类型。当遇到运行时错误时,仅回滚发生错误的语句;当遇到的错误时编译错误时,回滚所有的语句。,例9.5比较自动提交事务发生运行时错误和编译时错误的处理情况。 程序代码如下: -发生编译错误的事务示例: USE teaching GO INSERT INTO course VALUES(c11111,测试课程,必修,48,3.0); INSERT INTO course VALUES(c22222,测试课程,必修,48,3.0); -语法错误 INSERT INTO course VALUSE (c33333,测试课程,必修,48,3.0); SELECT * FROM course; GO,-发生运行时错误的事务示例: USE teaching GO INSERT INTO course VALUES(c11111,测试课程,必修,48,3.0); INSERT INTO course VALUES(c22222,测试课程,必修,48,3.0); -重复键 INSERT INTO cou

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号