sqlserver2005从入门到精通.pdf
文本预览下载声明
?Ⅲ捷⒕
如何在SQL Server 中修改数据
= 第10章 用事务来提供安全的数据库并发
= 第11章 保存历史数据
= 第12章 Reporting Services入门
= 第13章 Notification Services入门
第10 章 用事务来提供安全的数据库并发 191
10
用事务来提供安全的数据库并发
在学习完本章之后,您将可以:
l 在SQL Server 中定义一个事务
l 在事务中处理错误
l 选择合适的事务隔离级别
l 监视并防止阻塞和死锁问题
l 使用ADO.NET 管理事务
在前面两章中,学习了如何连接到远程数据源。对于涉及分布客户的应用程序来说,
需要特别注意的是防止一个用户覆盖另一个用户的输入。作为一个应用程序的设计者,还
需要确保一系列相关的更改不会中断,以防止只是部分完成这些更改。这些问题对于数据
库应用程序往往非常重要,因此我们专门用一章来介绍SQL Server 如何解决这些问题。在
本章中,将解释如何在事务中包装数据的更改,以防止用户之间的相互影响,并使应用程
序的设计者能够保证数据的完整性。
10.1 商业事务和SQL Server 事务
每一个商业过程都包括一个或多个的事务。想象一下,您正在管理一个网上商店。一
个消费者定购一个产品后,必须执行一个预先定义的进程才能确保交货的及时。这个进程
还必须包括信用卡的处理过程以保证公司收到了货款。如果这些任务中有一个失败了并且
不能更正,那么整个过程必须取消,以保证消费者在得到商品前不能给他开据发票,或者
反之。在有些情况下,这些过程通过计算机系统处理,数据存储在数据库中。与一个商业
事务相关的数据必须改为可靠、一致、完整的数据以符合实际的商业过程。这可以通过在
数据库级使用事务来完成。一个事务被定义为作为一个单元执行的符合所谓ACID 属性的
一序列的操作。
l 原子性 每一个事务是一个工作单元。它不能被分割成更小的部分。这个属性
意味着在事务中定义的一切数据更改要么都完成,要么都不完成。
l 一致性 一个事务不能违背定义在数据库中的任何完整性检查。为了维护一致
性,所有的规则、约束、检查和触发都会应用在事务中。由于所有的数据更改
在事务期间内进行,这些数据在事务开始和事务结束前会被确保为一致的。
l 隔离性 事务必须与其他事务进行的数据更改相隔离。这意味着没有其他操作
192 第Ⅲ部分 如何在SQL Server 中修改数据
可以改变中间态( 没有提交的) 的数据。为了避免中间态数据被更改,事务必须
要么等待来自其他事务的更改被提交,要么只能查看到处于上一个提交状态的
数据。
l 持久性 在一个事务完成,并且客户端应用程序已经被提示这个事务已经成功
完成后,无论发生任何系统错误,这些更改的数据将永久存在。
SQL Server 数据库引擎会通过事务日志强制执行事务的物理一致性,并且保证事务的
持久性。SQL Server 还会强制对约束、数据类型以及其他内容执行一切一致性检查以确保
逻辑上的一致性。这都由SQL Server 自动地强制执行。然而,为了将商业事务映射到SQL
Server 事务,开发者必须谨慎设计一些事务。
1. 定义事务的外延。开发者必须定义事务从哪里开始,到哪里结束。一个事务总应该
越短越好,但是同时要做到尽量符合实际业务过程的需求。
2. 定义错误管理。在事务中并不是所有的错误都会自动回滚。开发者有责任实现错误
管理。
3. 定义隔离级别。隔离不同的事务总是会有与并行性相关的缺陷。如果完全地隔离事
务并且其他事务希望读取相同但不为前一状态的数据,那么它会被阻塞直到您结束您的事
务。这对于有许多并行连接的数据库系统来说是一个严重问题。SQL Server 实现了一些不
同种类的、需要正确选择的隔离级别。一般规则是选择在尽可能短的时间内锁住尽可能少
的数据,并可以提供需要的事务安全性的隔离级别。
本章后文将介
显示全部