SQL Server 2005数据库实用教程 高职应用技术专业 屈武江第10章 事务和锁

上传人:w****i 文档编号:92362963 上传时间:2019-07-09 格式:PPT 页数:25 大小:153KB
返回 下载 相关 举报
SQL Server 2005数据库实用教程 高职应用技术专业 屈武江第10章 事务和锁_第1页
第1页 / 共25页
SQL Server 2005数据库实用教程 高职应用技术专业 屈武江第10章 事务和锁_第2页
第2页 / 共25页
SQL Server 2005数据库实用教程 高职应用技术专业 屈武江第10章 事务和锁_第3页
第3页 / 共25页
SQL Server 2005数据库实用教程 高职应用技术专业 屈武江第10章 事务和锁_第4页
第4页 / 共25页
SQL Server 2005数据库实用教程 高职应用技术专业 屈武江第10章 事务和锁_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《SQL Server 2005数据库实用教程 高职应用技术专业 屈武江第10章 事务和锁》由会员分享,可在线阅读,更多相关《SQL Server 2005数据库实用教程 高职应用技术专业 屈武江第10章 事务和锁(25页珍藏版)》请在金锄头文库上搜索。

1、第10章 事务和锁,1、掌握事务的概念和事务的性质; 2、掌握事务的访问; 3、了解锁定的使用;,本章重点,10.1 事务 10.2 管理并发数据访问 10.3 锁定,第10章 事务和锁,事务可以看作单个的处理单元。如果某一事务执行,则在该事务中的所有操作均会执行,记录在数据库中,成为持久的组成部分。如果遇到问题,则必须全部取水或回滚,所有处理均被清除。 SQL Server 2005数据库包括自动提交事务、显式事务、隐式事务和批处理级事务等四种形式。 自动提交事务,是指每条单独的语句都是一个事务,执行语句即提交事务; 显式事务是指以BEGIN TRANSACTION语句开始,以COMMIT或

2、ROLLBACK语句结束事务; 隐式事务则为在前一个事务完成时,新事务隐式启动,但每个事务仍以COMMIT或ROLLBACK语句显式完成; 批处理级事务则只能应用于多个活动结果集,10.1 事务,10.1.1 事务的性质 (1)原子性(Atomicity) 一个事务是一个不可分割的工作单元,事务在执行时,应该遵守“要么不做,要么全做”(Nothing or All)的原则,即不允许完成部分的事务。即使因为故障而使事务未能完成,它执行过的部分也要被取消。 (2)一致性(Consistency) 一个事务不能违背定义在数据库的任何完整性检查。为了维护一致性,所有的规则、约束、检查和触发都会应用在事

3、务中。 (3)隔离性(Isolation) 事务必须与其他事务进行的数据更改相隔离。这表示没有其他操作可以改变中间态的数据。事务必须等待其他事务的更改被提交,或者只能查看到处于上一个提交状态的数据。 (4)持久性(Durability) 持久性指一个事务一旦提交,它对数据库数据的改变应该是持久的,即使数据库因为故障而受到破坏,DBMS也应该能够恢复。 事务上述四个性质的英文术语的第一个字母为A、C、I、D,因此,这四个性质又称为事务的ACID准则。,10.1.2 事务的启动 BEGIN TRANSACTION表示事务的起点。 运行事务如果遇上错误,在BEGIN TRANSACTION之后的所有

4、数据改动都能进行回滚,将数据返回到已知的一致状态。而每个事务继续执行直到它无误地完成并且用COMMIT TRANSACTION对数据库作永久地改动,或者遇上错误并且用ROLLBACK TRANSACTION语句恢复所有改动。 使用BEGIN TRANSACTION启动事务的语法结构如下所示: BEGIN TRAN | TRANSACTION transaction_name | tran_name_variable WITH MARK description ; 参数说明: (1)transaction_nam:指分配给事务的名称。 (2)tran_name_variabl:用户定义的、含有有

5、效事务名称的变量的名称。 (3)WITH MARK description :指定在日志中标记事务。,【例10-1】列举命名事务,建立名为“MyTrans”的事务。 DECLARE TranName VARCHAR(20); SELECT TranName = MyTrans; BEGIN TRANSACTION TranName; GO USE AdventureWorks; GO DELETE FROM Studentdb.dbo.Teacher WHERE S_no =010001; GO COMMIT TRANSACTION MyTrans; GO 以上代码不能正确执行,因为违反了外键

6、约束。,【例10-2】使用WITH MARK为事务LogDelete0建立标记,标记名为“LogDelete0”。 BEGIN TRANSACTION LogDelete0 WITH MARK NDeleting a Job Candidate; GO USE Studentdb; GO DELETE FROM Studentdb.dbo.Teacher WHERE T_no = 010001; GO COMMIT TRANSACTION LogDelete0; GO,10.1.3 事务的保存 用户可以在事务内设置保存点。保存点用来定义在按条件取消某个事务的一部分时,该事务可以返回的一个保存点

7、位置。如果将事务回滚到保存点,则根据需要必须完成其他剩余的语句后提交事务,或者将事务回滚到起始点完全取消事务。 SAVE TRAN | TRANSACTION savepoint_name | savepoint_variable ; 参数说明: (1)savepoint_name:分配给保存点的名称。 (2)savepoint_variable:包含有效保存点名称的用户定义变量的名称。 在事务中允许有重复的保存点名称,但指定保存点名称的ROLLBACK TRANSACTION语句只将事务回滚到使用该名称的最近的SAVE TRANSACTION。,【例10-3】使用SAVE TRANSACTI

8、ON在事务内设置保存点a,b,通过并使用回滚验证保存点的位置。 USE Studentdb GO CREATE TABLE Temp0 ( Col1 char(2) NOT NULL, Col2 varchar(10) ) USE Studentdb GO BEGIN TRANSACTION INSERT INTO Temp0 VALUES(01,张强) SAVE TRANSACTION a INSERT INTO Temp0 VALUES(02,刘志) SAVE TRANSACTION b INSERT INTO Temp0 VALUES(03,李刚) ROLLBACK TRANSACTIO

9、N b INSERT INTO Temp0 VALUES(04,王江) ROLLBACK TRANSACTION a COMMIT TRANSACTION GO,10.1.4 事务的提交 提交事务标志着从BEGIN TRANSACTION开始的事务到提交时的结束。 系统变量TRANCOUNT返回当前连接的活动事务数。在事务处理中,该变量是用于判断事务处理过程的最重要的系统变量。 在提交事务时,如果TRANCOUNT函数的值为1,COMMIT TRANSACTION使得自从事务开始以来,所执行的所有数据提交到数据库,全部生效,同时释放事务所占用的资源,同时将TRANCOUNT函数值减少到0。如果

10、TRANCOUNT大于1,则COMMIT TRANSACTION使TRANCOUNT按1递减并且事务将保持活动状态。 使用COMMIT TRANSACTION提交事务的语法结构如下所示: COMMIT TRAN | TRANSACTION transaction_name | tran_name_variable ; 参数说明: (1)transaction_name: transaction_name 指定由前面的 BEGIN TRANSACTION 分配的事务名称。 (2)tran_name_variable:用户定义的、含有有效事务名称的变量的名称。,【例10-4】删除示例数据库日志作业

11、表dbo.DatabaseLog中的所示数据。 USE AdventureWorks; GO BEGIN TRANSACTION; GO DELETE FROM AdventureWorks.dbo.DatabaseLog; GO COMMIT TRANSACTION; GO,10.1.5 事务的回滚 用户可以使用ROLLBACK TRANSACTION清除自事务的起点或到某个保存点所做的所有数据的操作,回滚后系统将释放由事务控制的资源。 使用ROLLBACK TRANSACTION回滚事务的语法结构如下所示: ROLLBACK TRAN | TRANSACTION transaction_n

12、ame | tran_name_variable | savepoint_name | savepoint_variable ; 参数说明: (1)transaction_name:是为 BEGIN TRANSACTION 上的事务分配的名称。 (2)tran_name_variable:是用户定义的、包含有效事务名称的变量的名称。 (3)savepoint_name:是SAVE TRANSACTION 语句中的 savepoint_name。 (4)savepoint_variable:是用户定义的、包含有效保存点名称的变量的名称。 示例请参考【例10-3】。,10.1.6 自动提交事务 事

13、实上,SQL Server 2005数据库将一切数据处理都以事务的形式运行,也就是说SQL Server2005无论是否显示地定义事务,都会以事务的方式进行。如果用户没有显示地为代码定义事务,SQL Server 2005数据库会自动为该处理定义事务。由SQL Server定义的事务称作自动提交事务。 自动提交模式是SQL Server的默认模式,每个T-SQL语句在完成时,都被提交或回滚。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。,10.1.7 显式事务 显式事务就是显式地在代码中定义事务的开始和结束的事务。显示事务具体的语法要求包括,使用BEGIN TRANSACT

14、ION标记显式连接事务的起始点、使用COMMIT TRANSACTION或COMMIT WORK设为事务正确运行的结束点、使用ROLLBACK TRANSACTION或ROLLBACK WORK来清除遇到错误的事务,回滚到事务的起始点。 【例10-5】以下示例使用TRY CATCH数据进行显式事务的一般处理;使用CATCH捕获插入数据事务错误,使用ROLLBACK TRAN回滚该错误。 USE AdventureWorks GO CREATE TABLE Trans_1 ( id int NOT NULL PRIMARY KEY, col1 nvarchar(20) NOT NULL, mem

15、o nvarchar(20) NULL ) GO,USE AdventureWorks BEGIN TRY BEGIN TRAN INSERT INTO Trans_1 (id,col1,memo) VALUES (1,test1,test1) INSERT INTO Trans_1 (id,col1,memo) VALUES (2,NULL,test2) INSERT INTO Trans_1 (id,col1,memo) VALUES (1,test3,test3) COMMIT TRAN END TRY BEGIN CATCH SELECT 错误=error ROLLBACK TRAN

16、END CATCH,10.1.8 隐式事务 隐式事务是SQL Server 2005数据库提供的另一种事务处理模式。在使用这种模式时,SQL Server在没有事务存在的情况下会开始一个事务,但不会像在自动模式中那样自动执行COMMIT或ROLLBACK语句,事务必须显式结束。 隐式事务需用下面的语句设置: SET IMPLICIT_TRANSACTIONS ON; 执行以下代码关闭隐式事务: SET IMPLICIT_TRANSACTIONS OFF; 在使用隐式事务时要小心,不要忘记提交或回滚工作。由于没有显式的BEGIN TRAN语句,提交或回滚步骤容易被忘记,并导致事务长期运行;在连接关闭时产生不必要的回滚,以及与其连接之间产生阻塞问题。 为连接设置了隐性事务模式之后,数据库引擎实例首次执行下列任何语句时,都会自动启动一个隐

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

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