数据库技术与应用——SQL Server 2008 教学课件 ppt 作者 胡国胜 第12章 事务和锁

上传人:E**** 文档编号:89563476 上传时间:2019-05-28 格式:PPT 页数:26 大小:277.50KB
返回 下载 相关 举报
数据库技术与应用——SQL Server 2008 教学课件 ppt 作者 胡国胜 第12章  事务和锁_第1页
第1页 / 共26页
数据库技术与应用——SQL Server 2008 教学课件 ppt 作者 胡国胜 第12章  事务和锁_第2页
第2页 / 共26页
数据库技术与应用——SQL Server 2008 教学课件 ppt 作者 胡国胜 第12章  事务和锁_第3页
第3页 / 共26页
数据库技术与应用——SQL Server 2008 教学课件 ppt 作者 胡国胜 第12章  事务和锁_第4页
第4页 / 共26页
数据库技术与应用——SQL Server 2008 教学课件 ppt 作者 胡国胜 第12章  事务和锁_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《数据库技术与应用——SQL Server 2008 教学课件 ppt 作者 胡国胜 第12章 事务和锁》由会员分享,可在线阅读,更多相关《数据库技术与应用——SQL Server 2008 教学课件 ppt 作者 胡国胜 第12章 事务和锁(26页珍藏版)》请在金锄头文库上搜索。

1、第12章 事务和锁,数据库是可供多个用户共享的信息资源。允许多个用户同时 使用数据库的系统成为多用户数据库系统。当多个用户并发地存 取数据库时,就会产生多个事务同时存取同一数据的情况。数据 库的并发控制就是控制数据库,防止多用户并发使用数据库时造 成数据错误和程序运行错误,保证数据的完整性。事务是多用户 系统的一个数据操作基本单元。封锁是使事务对它要操作的数据 有一定的控制能力。,12.1 事务,多用户并发存取同一数据可能会引起数据的不一致性问题。正确地使用事务可以有效地控制这类问题发生的频度甚至能避免这类问题的发生。 事务(Transaction),是指一个操作序列,这些操作序列要么都被执行

2、,要么都不被执行,它是一个不可分割的工作单元。事务中任何一条语句执行时出错,都必须取消或回滚该事务,即撤销该事务已做的所有动作,系统返回到事务开始前的状态。事务是并发控制的基本单元,是数据库维护数据一致性的单位。在每个事务结束时,都能保持数据一致性。例如,银行转账工作,从一个账号扣款并使另一个账号增款,这两个操作要么都被执行,要么都不被执行。因此,应该把它们看成一个事务。,12.1.1 事务的特性及管理,1. 事务的特性 当事务处理系统创建事务时,将确保事务有某些特性。这些特性称为ACID特性。ACID就是:原子性(Atomicity )、一致性(Consistency)、隔离性(Isolat

3、ion)和持久性(Durabilily)。 (1) 原子性 原子性属性用于标识事务是否完全地完成,一个事务的任何更新要在系统上完全完成,如果由于某种原因出错,事务不能完成它的全部任务,系统将返回到事务开始前的状态。 例如,银行转帐时,如果在转帐的过程中出现错误,整个事务将会回滚。只有当事务中的所有部分都成功执行了,才将事务写入磁盘并使变化永久化。,12.1.1 事务的特性及管理,(2) 一致性 事务在系统完整性中实施一致性,这通过保证系统的任何事务最后都处于有效状态来实现。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回

4、滚,系统返回到原始状态。因为事务开始时系统处于一致状态,所以现在系统仍然处于一致状态。 例如,银行转帐时,在帐户转换和资金转移前,帐户处于有效状态。如果事务成功地完成,并且提交事务,则帐户处于新的有效的状态。如果事务出错,终止后,帐户返回到原先的有效状态。,12.1.1 事务的特性及管理,(3) 隔离性 在隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。 例

5、如,在银行系统中,其他过程和事务在我们的事务完成前看不到我们的事务引起的任何变化,这对于终止的情况非常重要。如果有另一个过程根据帐户余额进行相应处理,而它在我们的事务完成前就能看到它造成的变化,那么这个过程的决策可能建立在错误的数据之上,因为我们的事务可能终止。这就是说明了为什么事务产生的变化,直到事务完成,才对系统的其他部分可见。,12.1.1 事务的特性及管理,(4) 持久性 持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的,接下来的其他操作或故障不应该对其结果产生任何影响。 2. 事务的管理 在SQL Server 2008中,对事务的管理包含3个方面: 事务控制语句:控制

6、事务执行的语句。包括将一系列操作定义为一个工作单元来处理; 锁机制:封锁正被一个事务修改的数据,防止其他用户访问到“不一致”数据; 事务日志:使事务具有可恢复性。,12.1.2 事务控制语句,SQL Server 2008为每个独立的SQL语句都提供了隐含的事务控制,使得每个DML的数据操作得以完整提交或回滚,但是SQL Server 2008还提供了显式事务控制语句。 在SQL Server2008中,对事务的管理是通过事务控制语句和几个全局变量结合起来实现的。,12.1.2 事务控制语句,1. 事务控制语句 BEGIN TRANSACTION tran_name:标识一个用户定义的事务的开

7、始。tran_name为事务的名字,标识一个事务开始。 COMMIT TRANSACTION tran_name:表示提交事务中的一切操作,结束一个用户定义的事务,使得对数据库的改变生效; ROLLBACK TRANSACTION tran_name| save_name:回退一个事务到事务的开头或一个保存点。表示要撤销该事务已做的操作,回滚到事务开始前或保存点前的状态; SAVE TRANSACTION save_name:在事务中设置一个保存点,名字为save_name,它可以使一个事务内的部分操作回退。 其中,TRANSACTION可简写为TRAN。,12.1.2 事务控制语句,2. 两

8、个可用于事务管理的全局变量 两个可用于事务管理的全局变量是error和rowcount。 error:给出最近一次执行的出错语句引发的错误号,error为0表示未出错。 rowcount:给出受事务中已执行语句所影响的数据行数。,12.1.2 事务控制语句,3. 事务控制语句的使用 事务控制语句的使用方法如下: BEGIN TRAN A组语句序列 SAVE TRAN save_point B组语句序列 IF error0 ROLLBACK TRAN save_point /* 仅回退B组语句序列 */ COMMIT TRAN /* 提交A组语句,且若未回退B组语句,则提交B组语句*/,12.1

9、.2 事务控制语句,【例12-1】使用事务向表AdminTb中插入数据。 解:步骤如下: 1) 在SQL Server 2008中打开“查询管理器”,创建事务,输入代码如下。 USE Library GO BEGIN TRAN tran_inst INSERT INTO AdminTb(Admin ,Psw ) VALUES (WANG1,ABC) SAVE TRAN int_point INSERT INTO AdminTb(Admin ,Psw ) VALUES (WANG2,123) GO INSERT INTO AdminTb(Admin ) VALUES (WANG3) GO IF

10、ERROR0 ROLLBACK TRAN int_point GO COMMIT TRAN tran_inst GO,12.1.2 事务控制语句,2) 点击按钮,运行结果如图12-1所示,消息框中显示“一行受影响”。 3) 查询表AdminTb中数据,结果如图12-2所示。只有(WANG1,ABC)这条数据被插入表中。 说明:本例定义的事务名为tran_inst。该事务运行后首先向表AdminTb中插入一条用户名、密码分别是“WANG1”、“ABC”的记录,插入成功后,定义保存点int_point;再插入用户名、密码分别是“WANG2”、“123”的记录,此记录也能插入成功;然后插入用户名为“

11、WANG3”的记录,由于缺少Psw列,而Psw列具有NOT NULL属性,故记录插入不会成功,插入语句出错,这使得ERROR不为0,此时回滚到保存点int_point,已插入的用户名为“WANG2”的记录将会从表中被回滚掉。因此,执行以上SQL脚本后只向表AdminTb中插入了一条用户名为“WANG1”,密码为“ABC”的用户记录。,12.1.2 事务控制语句,图12-1 创建事务 图12-2 事务执行结果,12.1.2 事务控制语句,4. 事务中不能包含的语句 在事务中不能包含如下语句: CREATE DATABASE; ALTER DATABASE; BACKUP LOG; DROP DA

12、TABASE; RECONFIGURE; RESTORE DATABASE; RESTORE LOG; UPDATE STATISTICS。,12.2 锁,锁定是 Microsoft SQL Server 数据库引擎用来同步多个用户同时对同一个数据块的访问的一种机制。 当多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 幻觉读 幻觉读是指当事务不是独立执行时发生的一种现象。例如,第一个事务对一个表中的数据进行了修改,这种修改涉及表中的所有数据行;同时,第二个事务也修改了这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行

13、,就好像发生了幻觉一样。,12.2 锁, 脏读 脏读是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中;这时,另外一个事务也访问这个数据,并且使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。 不可重复读 不可重复读是指在一个事务内,多次读同一数据;在这个事务还没有结束时,另外一个事务也访问该同一数据并做了修改。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,第一个事务两次读到的数据可能是不一样的,即一个事务内两次读到的数据时不一样的。,12.2 锁,锁是实现并发控制的主要方法,

14、是多个用户能够同时操纵同一个数据库中的数据而不发生数据不一致现象的重要保障。 应用程序一般不直接请求锁。 锁由数据库引擎的一个部件(称为“锁管理器”)在内部管理。 当数据库引擎实例处理Transact-SQL 语句时,数据库引擎查询处理器会决定将要访问哪些资源。 查询处理器根据访问类型和事务隔离级别设置来确定保护每一资源所需的锁的类型。 然后,查询处理器将向锁管理器请求适当的锁。 如果与其他事务所持有的锁不会发生冲突,锁管理器将授予该锁。,12.2.1 锁的模式,Microsoft SQL Server 数据库引擎使用不同的锁模式锁定资源,这些锁模式确定了并发事务访问资源的方式,见表12-1。

15、 表12-1 锁的模式,12.2.1 锁的模式,1. 共享锁 共享锁(S 锁)允许并发事务在封闭式并发控制下读取 (SELECT) 资源。资源上存在共享锁(S 锁)时,任何其他事务都不能修改数据。 读取操作一完成,就立即释放资源上的共享锁(S 锁),除非将事务隔离级别设置为可重复读或更高级别,或者在事务持续时间内用锁定提示保留共享锁(S 锁)。,12.2.1 锁的模式,2. 更新锁 更新锁(U 锁)可以防止常见的死锁。 在可重复读或可序列化事务中,此事务读取数据 获取资源(页或行)的共享锁(S 锁),然后修改数据 此操作要求锁转换为排他锁(X 锁)。 如果两个事务获得了资源上的共享模式锁,然后

16、试图同时更新数据,则一个事务尝试将锁转换为排他锁(X 锁)。 共享模式到排他锁的转换必须等待一段时间,因为一个事务的排他锁与其他事务的共享模式锁不兼容;发生锁等待。 第二个事务试图获取排他锁(X 锁)以进行更新。 由于两个事务都要转换为排他锁(X 锁),并且每个事务都等待另一个事务释放共享模式锁,因此发生死锁。,12.2.1 锁的模式,3. 排他锁 排他锁(X 锁)可以防止并发事务对资源进行访问。 使用排他锁(X 锁)时,任何其他事务都无法修改数据;仅在使用 NOLOCK 提示或未提交读隔离级别时才会进行读取操作。 4. 意向锁 意向锁主要用来保护共享锁(S 锁)或排他锁(X 锁)放置在锁层次结构的底层资源上。可以在较低级别锁前可获取它们,因此会通知意向将锁放置在较低级别上。 意向锁有两种用途: (1) 防止其他事务以会使较低级别的锁无效的方式修改较高级别资源。 (2) 提高数据库在较

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

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

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