文档介绍:第11讲管理事务和锁
事务
锁
事务
1. 事务(Transaction)的概念
事务是一个操作序列,确保多个数据修改作为一个整体加以处理,一起向系统提交或撤销,操作请求要么都执行,要么都不执行。
2. 事务的特点:
原子性
一致性
隔离性
持久性
: BEGIN Transaction
: ROLLBACK TRAN MIT TRAN
5. SQL Server 事务的类型
SQL Server 中有两种事务
隐性事务
显式事务(或称为用户定义事务)
提交的事务不能撤销或回滚
保存点定义了当事务的一部分有条件地取消时,事务可以返回的位置
每个事物都记录在事务日志中,以维护数据库一致性,并在恢复时提供帮助
6. 事务恢复和检查点
事务恢复
SQL Server 可以在掉电、系统软件发生故障、客户端出现问题或收到事务取消请求时利用事务日志自动恢复数据
SQL Server 保证在发生故障时,所有已提交的事务都反映在数据库中。它使用事务日志前滚所有已提交的事务,回滚任何未提交的事务
初始时,在数据缓存中和磁盘上的页是相同的
当事务提交时,改变数据缓存内的页
当缓存满时,改变过的页写入磁盘
当到达检查点时,缓存写入磁盘。磁盘数据再次与缓存数据保持一致
事务恢复和检查点(续)
事务恢复
需要的动作
无
检查点
系统故障
1
2
3
4
5
前滚
回滚
前滚
回滚
7. 使用事务的考虑事项
使用事务的指导方针
事务应尽可能短,并避免嵌套事务
为了尽量减少事务所花费的时间,小心使用特定的 Transact-SQL 语句
在事务期间不应该等待用户输入。用户输入应该在事务开始前进行
INSERT、UPDATE 和 DELETE 应该是事务中的主要语句,且应该尽可能少地改变数据行
若可能的话,在浏览数据之前不要开始事务。事务应该在初步数据分析结束后开始
在事务中尽量减少对数据的访问。这可以减少锁定表的数目,减少数据争用
使用事务的考虑事项(续)
嵌套事务
可以嵌套事务,但应慎重使用,因为提交失败或回滚事务可能会造成锁无法正常释放
可使用@***@trancount 全局变量测定嵌套深度
嵌套事务块
嵌套块中的 ROLLBACK TRAN 语句回滚所有层次的事务
MIT TRAN 来说,若它不是最外层块的一部分,它什么都不做;若它是最外层块的一部分,则提交所有层次的事务
8. 设定隐性事务选项
隐性事务
当开启连接的隐性事务模式时,执行下列语句会触发事务的开始ALTER TABLE、CREATE、DELETE、DROP、FETCH、GRANT、INSERT、OPEN、REVOKE、SELECT、TRUNCATE TABLE、UPDATE
不允许嵌套事务
设定选项默认是关闭的
设定隐性事务选项(续)
显式和隐性事务
默认情况下,SQL Server 将每一条语句视为独立的,并在执行之后立即提交,每条数据修改语句单独成为一个隐性事务
若需要在事务中包含多条语句,必须将语句组用 BEGIN TRAN MIT TRAN(或 ROLLBACK TRAN)包装起来。包含多条语句的事务成为显式事务
为了配置 SQL Server 隐性事务模式,可使用 SET IMPLICIT_TRANSACTION ON
若启用了隐性事务模式,则所有语句都被认为是一个事务的一部分,MIT TRAN(MIT WORK),否则不会提交任何修改工作