事务处理1.ppt
文本预览下载声明
第13章 事务处理 事务的定义 事务的性质-ACID ACID 原子性A: 事务处理是组成对象的最小单元。要么整体成功;要么整体失败。 一致性C:所有的改变都以一致的方式进行,系统从一个有效状态进入另一个有效状态。 隔离性I:在同一时间进行的事务处理相互独立。 持久性D:如果提交了一个事务处理,产生的效果将是不变的,即使系统失败,也是如此。 事务处理控制语句 BEGIN TRANSACTION COMMIT TRANSACTION ROLLBACK TRANSACTION 事务缺陷-脏读 脏读:在事务提交前,它对数据所做的修改对其他事务来说是可见的。是危害最大的事务完整性缺陷。 Set Transaction Isolation Level Read Committed; Use DatabaseName -- Transaction-1 Begin Transaction Update Customer Set Nickname=‘XXX’ Where CustomerID=1 --Transaction-2 Set Transaction Isolation Level Read UnCommitted Select Nickname From Customer Where CustomerID=1 --Transaction-1 Commit Transaction 事务缺陷-不可重复读 不可重复读:如果隔离性是完全的,一个事务不应看到该事务外的数据修改。 -- Transaction-1 Set Transaction Isolation Level Read Committed; Use DatabaseName Begin Transaction Select Nickname From Customer Where CustomerID=1 --Transaction-2 Update Customer Set Nickname=‘XXX’ Where CustomerID=1 Commit Transaction --T-2提交后T-1再次检索同一行,如能看到T-2更新后的值,则说明存在不可重复读缺陷。 Select Nickname From Customer Where CustomerID=1 Commit Transaction 事务缺陷-虚幻行 是危害最小的事务完整性缺陷。也是指事务的更新操作不仅影响结果集的数据值,还导致Select语句返回不同的记录集。 -- Transaction-2 Begin Transaction Select * From Customer Where Nickname=‘Missy’ --Transaction-1 Begin Transaction Update Customer Set Nickname=‘Missy’ Where CustomerID=1 Commit Transaction --Transaction-2如果隔离性是完全的,T2再次执行同样的Select命令时,应得到与以前相同的记录集。 Select * From Customer Where Nickname=‘Missy’ Commit Transaction 隔离级别-1 数据库可通过调整隔离级别来控制允许的事务缺陷。ANSI SQL-92定义了4个隔离级别。SQL Server使用锁来实现隔离级别,默认隔离级别为已提交读。 级别1:未提交读:最不严格的隔离级别,不能防止任何事务缺陷,根本没有在事务之间提供隔离。这种模式只能确保数据不会受损,而不能处理行争用。 级别2:已提交读: SQL Server默认隔离级别。 级别3:可重复读:能够防止脏读和不可重复读。 隔离级别-2 级别4:可序列化:最严格的隔离级别,能够防止所有事务缺陷。这种设置虽然提供了完全的事务隔离性,但将导致严重的锁争用并降低性能。 SQL Server 新增隔离: 快照隔离:它创建要更新的数据的快照拷贝(TempDB)。在更新期间,阅读事务能够继续读取原始数据,更新被提交后,将覆盖原始数据。快照隔离消除了读取事务和写入事务之间的争用。但争用并未完全消失,而是转移到写出事务和写入事务之间。如果第二个写入事务试图更新正在被更新的资源,它将被阻塞。 隔离级别-3 已提交读快照:其行为与已提交读相同,但写入事务和读取事务之间不存在争用。 SQL Server 的锁机制-锁 可以认为SQL Server中有两个进程:查询处理器和锁管理器。 锁管理器的目标是通过创建和释放锁尽可能高效地确保事务完整性。 每个锁都有的三个属性: 粒度(Granularity):锁的大小 模
显示全部