事务和锁
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9.1 事务概述
9.1.2事务的分类 事务的分类
(3)隐式事务。 在隐式事务中,SQL Server在没有事务定 )隐式事务。 在隐式事务中, 在没有事务定 义的情况下会开始一个事务, 义的情况下会开始一个事务,但不会像在自动提交模式 中那样自动执行COMMIT或ROLLBACK语句,事务必 语句, 中那样自动执行 或 语句 须显式结束。Transact-SQL 脚本使用SET 须显式结束。 脚本使用 IMPLICIT_TRANSACTIONS ON / OFF语句可以启动/ OFF语句可以启动 语句可以启动/ 关闭隐式事务模式。 关闭隐式事务模式。 (4)分布式事务。一个比较复杂的环境,可能有多台服务 )分布式事务。一个比较复杂的环境, 器,那么要保证在多服务器环境中事务的完整性和一致 就必须定义一个分布式事务。在分布式事务中, 性,就必须定义一个分布式事务。在分布式事务中,所 有的操作都可以涉及对多个服务器的操作, 有的操作都可以涉及对多个服务器的操作,当这些操作 都成功时, 都成功时,那么所有这些操作都提交到相应服务器的数 据库中,如果这些操作中有一条操作失败, 据库中,如果这些操作中有一条操作失败,那么这个分 布式事务中的全部操作都被取消。 布式事务中的全部操作都被取消。
9.1 事务概述
9.1.2事务的分类 事务的分类
跨越两个或多个数据库的单个数据库引擎 实例中 的事务实际上也是分布式事务。该实例对分布式 的事务实际上也是分布式事务。 事务进行内部管理;对于用户而言, 事务进行内部管理;对于用户而言,其操作就像 本地事务一样。 本地事务一样。 对于应用程序而言, 对于应用程序而言,分布式提交必须由事务管理 器管理, 器管理,以尽量避免出现因网络故障而导致事务 由某些资源管理器成功提交, 由某些资源管理器成功提交,另一些资源管理器 回滚的情况。 回滚的情况。通过准备阶段和提交阶段管理提交 进程可避免这种情况,这称为两阶段提交。 进程可避免这种情况,这称为两阶段提交。
-- No BEGIN TRAN needed here. INSERT INTO course BEGIN TRANSACTION VALUES('c05151','管理信息系统','选修',48,3.0); INSERT INTO course PRINT N'Tran count in 1st implicit transaction = ' VALUES('c05141','WIN程序设计 选修',64,4.0); 程序设计','选修 程序设计 选修 + CAST(@@TRANCOUNT AS NVARCHAR(10)); 9.2.1 启动事务 count at 1st = ' + CAST(@@TRANCOUNT AS PRINT N'Tran INSERT INTO course 2.隐式事务的定义 . NVARCHAR(10)); INSERTVALUES('c05152','电子商务','选修',48,3.0); INTO course 分别使用显式事务和隐式事务向表course中插入两条记 例9.3 分别使用显式事务和隐式事务向表 中插入两条记 录。 VALUES('c05142','WEB程序设计 选修',64,4.0); 程序设计','选修 程序设计 选修 PRINT N'Tran count in 2nd implicit transaction = ' 程序代码如下: 程序代码如下: count at 2nd = ' + CAST(@@TRANCOUNT AS PRINT N'Tran + CAST(@@TRANCOUNT AS NVARCHAR(10)); --firstNVARCHAR(10)); part GO COMMIT USE teaching TRANSACTION GO GO COMMIT TRANSACTION; -- second part N'Tran count after implicit transaction = ' SET NOCOUNT ON; PRINT PRINT N'Setting IMPLICIT_TRANSACTIONS ON.'; SET IMPLICIT_TRANSACTIONS OFF; AS NVARCHAR(10)); + CAST(@@TRANCOUNT GO SET IMPLICIT_TRANSACTIONS ON; SET IMPLICIT_TRANSACTIONS OFF; PRINT N'Use implicit transactions.'; PRINT N'Tran count at start = ' + CAST(@@TRANCOUNT AS GO NVARCHAR(10));
第09章 事务和锁 章
9.1 事务概述 9.2 管理事务 9.3 管理并发数据访问 9.4 管理锁 9.5小结 9.5小结
9.1 事务概述
在计算机系统设计过程中, 在计算机系统设计过程中,与一个商业事务相关 的数据必须保证可靠性、一致性和完整性, 的数据必须保证可靠性、一致性和完整性,以符 合实际的商业过程。 合实际的商业过程。 在SQL Server 2005中,通常由事务来完成相关操 中 以确保多个数据的修改作为一个单元来处理。 作,以确保多个数据的修改作为一个单元来处理。 事务( 事务(Transaction)是单个的工作单元。如果某 )是单个的工作单元。 一事务执行成功, 一事务执行成功,则在该事务中进行的所有数据 修改均会提交,成为数据库中的永久组成部分。 修改均会提交,成为数据库中的永久组成部分。 如果事务遇到错误且必须取消或回滚, 如果事务遇到错误且必须取消或回滚,则所有数 据修改均被还原。 据修改均被还原。
需要注意的是:在使用隐式事务时, 需要注意的是:在使用隐式事务时,不要忘记结束事 提交或回滚)。 )。由于不需要显式的定义事务的 务(提交或回滚)。由于不需要显式的定义事务的 开始,事务的结束很容易被忘记, 开始,事务的结束很容易被忘记,导致失误长期运 在连接关闭时产生不必要的回滚; 行;在连接关闭时产生不必要的回滚;或者造成其 他连接的阻塞问题。 他连接的阻塞问题。
9.1 事务概述
9.1.1 事务的特点
定义事务必须符合如下的典型特征。 定义事务必须符合如下的典型特征。 原子性( ):事务包含的一系列数据操作是 原子性(Atomicity):事务包含的一系列数据操作是 ): 是一个整体。 是一个整体。执行部分操作则数据会回滚到原来的状 态。 一致性(Consistency) :事务执行完成后,将数据库从 事务执行完成后, 一致性 一个一致状态转变到另一个一致状态, 一个一致状态转变到另一个一致状态,事务不能违背 定义在数据库中的任何完整性检查。 定义在数据库中的任何完整性检查。 隔离性(Isolation) :一一个事务内部的操作及使用的 隔离性 数据对并发的其他事务是隔离的, 数据对并发的其他事务是隔离的,并发执行的各个事 务之间不能互相干扰 持久性(Durability):要求一旦事务提交,那么对数据 持久性 :要求一旦事务提交, 库所做的修改将是持久的, 库所做的修改将是持久的,无论发生何种机器和系统 故障,都不应该对其有任何影响。 故障,都不应该对其有任何影响。
定义一个事务, 数据库的score 例9.2 定义一个事务teaching数据库的 数据库的 定义一个事务, 数据库的score表中 例9.1 定义一个事务,将,将teaching数据库的 表中 数据库的 表中所有选了c05109号课程的学生的分数减 分, 号课程的学生的分数减5分 表中所有选了 号课程的学生的分数减 所有选了c05109号课程的学生的分数加 分,并提交该 号课程的学生的分数加5分 所有选了 号课程的学生的分数加 并提交该事务。 事务。 事务并提交该事务。 。 事务的基本操作包括启动 保存、提交或回滚等 启动、 事务的基本操作包括启动、保存、提交或回滚等。 程序代码如下: 程序代码如下 程序代码如下: 程序代码如下: : 9.2.1 启动事务 teaching USE USE teaching GO GO 1. 1.显式事务的定义 BEGIN TRAN Subtract_Score DECLARE @TranName VARCHAR(20); 显式事务需要明确定义事务的启动。 显式事务需要明确定义事务的启动。显式事务的定义 WITH MARK N'Subtract score of c05109'; SELECT 格式如下: 格式如下: @TranName = 'Add_Score'; GO BEGIN TRAN @TranName; BEGIN {TRAN | TRANSACTION} UPDATE SET final=final+5 UPDATE scorescore SET final=final-5 [{transaction_name | @tran_name_variable } WHERE courseno='c05109'; WHERE courseno='c05109'; COMMIT TRAN Subtract_Score; [WITH MARK[ 'description' ]] COMMIT TRAN @TranName; ] GO GO
SQL Server 2005 数据库 应用与开发
第09章 事务和锁 章
内容提要
事务是由一系列的数据操作命令组成,是数据库 事务是由一系列的数据操作命令组成, 应用程序的基本逻辑单元。 2005在对 应用程序的基本逻辑单元。SQL Server 2005在对 数据库进行操作时, 数据库进行操作时,通过事务来保证数据的一致 性和完整性。 性和完整性。 用户访问数据库时,经常出现并发的情况。 用户访问数据库时,经常出现并发的情况。数据 库系统的并发处理能力是衡量其性能的重要标志 之一。 之一。 数据库系统通过适当的并发控制机制协调并发操 作,保证数据的一致性。在SQL Server 2005中, 保证数据的一致性。 2005中 以事务为基本操作单位,使用锁来实现并发控制。 以事务为基本操作单位,使用锁来实现并发控制。
9.2 管理事务
源自文库
9.2 管理事务
9.2.1 启动事务
2.隐式事务的定义 . 默认情况下,隐式事务是关闭的。 默认情况下,隐式事务是关闭的。使用隐式事务需先 将事务模式设置为隐式事务模式。 将事务模式设置为隐式事务模式。不再使用隐式事 务时,要退出该模式。 务时,要退出该模式。
SET IMPLICIT_TRANSACTIONS {ON | OFF}
9.1 事务概述
9.1.2事务的分类 事务的分类
任何对数据的修改都是在事务环境中进行的。 任何对数据的修改都是在事务环境中进行的。按照事务定 义的方式可以将事务分为系统定义事务和用户定义事务。 义的方式可以将事务分为系统定义事务和用户定义事务。 SQL Server 2005支持 种事务模式分别对应上述两类事务: 支持3种事务模式分别对应上述两类事务 支持 种事务模式分别对应上述两类事务: 自动提交事务、显式事务和隐式事务。 自动提交事务、显式事务和隐式事务。 (1)自动提交事务。 SQL Server 2005将一切操作作为事 )自动提交事务。 将一切操作作为事 务处理,它不会在事务以外更改数据。 务处理,它不会在事务以外更改数据。如果没有用户定 义事务, 会自己定义事务, 义事务,SQL Server会自己定义事务,称为自动提交事 会自己定义事务 每条单独的语句都是一个事务。 务。每条单独的语句都是一个事务。 (2)显式事务。显式事务是指显式定义了启动和结束的事 )显式事务。 在实际应用中,大多数的事务是由用户来定义的。 务。在实际应用中,大多数的事务是由用户来定义的。 事务结束分为提交( 事务结束分为提交(COMMIT)和回滚(ROLLBACK) )和回滚( ) 两种状态。 两种状态。