事务、锁和批

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(5)意向锁:意向锁说明SQL Server有在 该资源上获得共享锁或者排它锁的意向。 意向锁可分为共享意向锁、排它意向锁和 共享排它意向锁三种。
2、锁的粒度
被锁定的资源单位称为锁的粒度(或称锁定粒度)。根据 情况,SQL Server中的锁可以灵活运用在不同的资源层次 上。锁定粒度由小到大可分为有以下几种:
(1)BEGIN TRANSACTION语句
用于定义事务的开始。当开始一个事务后,就在内存中 为这次操作开辟一个缓冲区。在实际应用中,事务往往 是嵌套的,即在一个事务还没有处理完前又开始了另一 个事务,这样高层的事务在提交自己的修改以前就可以 判断低层的事务是否成功提交或被取消。通常BEGIN TRANSACTION返回一个整型值,表示该事务所在的嵌 套层。最高层的事务将返回1。
1.3 锁
在实际应用中,可能会出现对数据库的并发操作。 如多个用户同时对同一数据进行修改,或者查询 正在被别的进程更新的数据,这都可能引起数据 的混乱。为了有效地控制多用户的并发操作, SQL Server引入了资源锁机制。
1、 锁的类型
SQL Server中有不同类型的锁,具体为:
(1)排它锁:它不允许别的事务读取或修改已被 锁定的资源。
返回
网络数据库技术与应用
2、隐式事务
用户可以执行SET IMPLICIT_TRANSACTION ON 语句使SQL Server进入隐式事务处理模式。这时用户 不必再执行BEGIN TRANSACTION 来启动 事务处理,而只需使用COMMIT TRANSACTION或ROLLBACK TRANSACTION来结束事务。当用户执行 了COMMIT TRANSACTION或ROLLBACK TRANSACTION之后,SQL Server就自动 进入下一个事务,将这种事务称为隐式事 务。
一个批中的语句将被SQL Server编译为一个执 行单元,称为SQL Server执行计划。在执行计 划过程中,如果其中任何一个语句存在语法上 的错误,则批中的所有语句都将被取消执行。
一个脚本文件中可以有多个批,SQL Server将 依次执行它们。应该注意的是,不是所有的语 句都可以放在一个批中。如:CREATE VIEW、 CREATE DEFAULT、CREATE TRIGGER、 CREATE PROCEDURE等语句应单独在一个批 中提交,在一个批中不能同时包含上述的两个 语句。
USE NORTHWIND SELECT * FROM CUSTOMERS WHERE REGION=’WA’ AND COUNTRY=’USA’ ORDER BY POSTALCODE ASC,CUSTOMERID ASC UPDATE EMPLOYEES SET CITY=’MISSOULA’ WHERE CUSTOMERID=’THECR’ GO
在多用户环境中,当不同的用户分别锁定一资源, 又都在等待对方首先释放该资源时,就会出现无 限等待的情况,这称为死锁。为了减少死锁的发 生,在设计程序时,应尽量减少事务对资源的锁 定时间。
SQL Server定期查看并标识所有的锁定请求,如 果在下一次查看过程中发现某请求仍然处于等待 状态,SQL Server将会搜索系统中是否有死锁现 象。如果存在死锁,则根据死锁的优先级别,先 结束一个优先级较低的事务。除此之外,用户还 可以设置LOCK_timeout来设置程序请求锁定的 最长等待时间。如果一个锁定请求等待超过了最 长等待时间,则该语句被自动取消。
(4)永久性:事务一旦完成,它对数据 库所进行的修改将被永久保留。另外, SQL Server每次启动时都会根据事务日 志来修复可能存在的错误,回退所有未 完成的事务。
1.2 事务的分类
事务可分为显式事务、隐式事务、自动事务和分布式事 务。
1、显式事务
显式事务就是由用户显式地指定具体的事务处理语句而 定义的事务。显式事务由以下几个事务处理语句构成:
网络数据库技术与应用
事务、锁和批
1.1 事务的概念 事务是SQL Server中的一个重要概念,在数据库应用中
普遍使用。一个事务作为一个整体来执行,它的关键在 于:如果在执行过程中发生了错误,可以回退事务,使 数据库恢复到事务开始之前的状态,就好像什么都没发 生过一样,从而有效地保证数据的完整性,实现数据库 的并发访问。
事务具有以下几个重要属性:
原子性:一个事务对数据库所作的修改要么全部被执行, 要么全部被取消。从保持数据状态上来讲,它是一个不 可分割的整体。
一致性:事务所作的修改必须遵守数据库中的各种约束、 规则的要求。
隔离性:如果有两个或者多个事务,这 些事务必须按照一定的时间顺序排序执 行,而不能在执行一个事务的同时又执 行另一个事务。这可以通过锁来实现。
3、自动事务模式
这是SQL Server默认的事务处理方式。当 任何一条语句被成功执行以后,它对数据 库所作的修改都将被自动提交,如果发生 错误则自动回退。如果想取得更大的灵活 性,可以用BEGIN TRANSACTION进入显 式事务模式或者打开 IMPLICIT_TRANSACTION进入隐式事务 模式。这时,可以将若干条数据库操作语 句组合成一个事务。
设置LOCK_timeout的语法格式为:
SET LOCK_timeout[timeout_period]
其中,timeout_period以毫秒为单位,如 要将当前的锁定请求时间限设为5秒,则 使用语句: SET LOCK_timeout集合,它以GO结束。如 下为一个批的例子:
(2)COMMIT TRANSACTION语句
标志着事务的结束,在事务中对数据库所 作的修改在此时提交。
(3)ROLLBACK TRANSACTION语句
用于取消此次事务以来所有对数据源所做 的操作。这是结束事务的一种方式,一般 是因为在事务的执行过程中发生了错误, 需要执行这条语句使数据库放弃在事务中 所作的更改,数据恢复到事务开始之前的 状态。执行ROLLBACK TRANSACTION后, 本次事务将结束。
4、分布式事务
前面所介绍的事务都是在一个服务器上的操作, 还有一种称为分布式事务的用户定义事务。分 布式事务跨越两个或多个服务器,通过建立分 布式事务并执行它,通过事务管理器负责协调 事务管理,保证数据的完整性。主要的事务管 理器是Microsoft分布式事务处理协调器MS DTC。 对于应用程序,管理分布式事务很像管理本地 事务。事务结束时,应用程序请求提交或回滚 事务。不同的是,分布式提交必须由事务管理 器管理,以尽量避免出现因网络故障而导致一 个事务由某些资源成功提交,由另一些资源管 理器回滚的情况。
RID行标识符:锁定表中的单行数据。 键值:具有索引的行数据。
页面:一个数据页面或者索引页面。
区域:一组连续的行数据页或索引页面。
表:整个表。
数据库:整个数据库。
锁的粒度不同,系统的开销不同,锁定粒度与数据库 访问并发度是一对矛盾,锁定粒度大,系统开销小,但并 发度会降低;锁定粒度小,系统开销大,但可提高并发度。
(2)共享锁:它允许别的事务读取已被锁定的资 源,但不允许对锁定的资源进行修改操作。
(3)修改锁:在可能进行修改操作的开始 阶段运用修改锁来锁定资源。在需要修改 时,将修改锁转变为排它锁或共享锁。
(4)结构锁:在进行表的创建或者修改时, SQL Server使用结构修改锁。当编译或查询 时,SQL Server使用结构稳定锁。
相关文档
最新文档