Presentation is loading. Please wait.

Presentation is loading. Please wait.

第11章 事务与锁 11.1 事务Transact 11.2 数据并发的问题 11.3 锁Lock 11.4 事务隔离级别.

Similar presentations


Presentation on theme: "第11章 事务与锁 11.1 事务Transact 11.2 数据并发的问题 11.3 锁Lock 11.4 事务隔离级别."— Presentation transcript:

1 第11章 事务与锁 11.1 事务Transact 11.2 数据并发的问题 11.3 锁Lock 11.4 事务隔离级别

2 能力目标   理解事务和锁的概念;   掌握使用和编写事务处理代码的技能;   了解各种锁的含义和锁的使用方法;   掌握事务隔离等级的设置方法。

3 态度目标   团队精神;   态度积极;   任务按时完成;   出勤。

4 重点难点   重点:   掌握使用和编写事务处理代码的技能;   了解各种锁的含义和锁的使用方法。   难点:

5 11.1 事务Transact 1. 事务Transact 事务是指一个逻辑单元的工作任务,这些工作
  事务是指一个逻辑单元的工作任务,这些工作 任务要么全做,要么全部放弃。它必须同时满足四 个特性:原子性、一致性、隔离性和持久性。   原子性(Atomic) :表示组成一个事务的多个 数据库操作是一个不可分隔的原子单元,只有所有 的操作执行成功,整个事务才提交,事务中任何一 个数据库操作失败,已经执行的任何操作都必须撤 销,让数据库返回到初始状态。   一致性(Consistency):事务操作成功后,数 据库所处的状态和它的业务规则是一致的,即数据 不会被破坏。

6 11.1 事务Transact 1. 事务Transact 隔离性(Isolation):在并发数据操作时,不
同的事务拥有各自数据空间,它们的操作不会对 对方产生干扰。数据库规定了多种事务隔离级别, 不同隔离级别对应不同的干扰程度,隔离级别越 高,数据一致性越好,但并发性越弱。   持久性(Durabiliy) :一旦事务提交成功后, 事务中所有的数据操作都必须被持久化到数据库 中,即使提交事务后,数据库马上崩溃,在数据 库重启时,也必须能保证能够通过某种机制恢复 数据。

7 11.1 事务Transact 2. 事务类型 自动提交事务: 系统默认每个TRANSACT-SQL命令都是一个
  2. 事务类型   自动提交事务:   系统默认每个TRANSACT-SQL命令都是一个 事务处理,由系统自动开始并提交。 隐式事务   该类事务是任何单独的 INSERT、UPDATE 或 者DELETE语句构成。当有大量的DDL和DML命令 执行时会自动开始,并一直保持到用户明确提交为 止。

8 11.1 事务Transact 2. 事务类型 显式事务 该类事务是用户自定义事务,是以BEGIN
  2. 事务类型   显式事务   该类事务是用户自定义事务,是以BEGIN TRANSACTION(事务开始)开头,以 COMMIT TRANSACTION(事务提交)或者 ROLLBACK TRANSACTION(回滚事务)语句结束的。   分布式事务   跨越多个服务器的事务称为分布式事务,SQL Server 可以由DTC来支持处理分布式事务,可以使 用 BEGIN DISTRIBUTED TRANSACTION 命令启 动一个分布式事务处理。

9 11.1 事务Transact 3. 事务控制 BEGIN TRANSACTION:该语句标记一个显
  3. 事务控制   BEGIN TRANSACTION:该语句标记一个显 式事务的开始点,即事务开始。其语法如下: BEGIN { TRAN | TRANSACTION }  [ { transaction_name }  [ WITH MARK [ 'description' ] ]    ][ ; ]   COMMIT TRANSACTION:该语句标志一个 成功的隐性事务或显式事务的结束,即事务提交。 其语法如下: COMMIT { TRAN | TRANSACTION }  [ transaction_name ] ][ ; ]

10 11.1 事务Transact 3. 事务控制 ROLLBACK TRANSACTION :该语句将显式
  3. 事务控制   ROLLBACK TRANSACTION :该语句将显式 事务或隐性事务回滚到事务的起点或事务内的某个 保存点。其语法如下: ROLLBACK { TRAN | TRANSACTION }      [ transaction_name      | savepoint_name ] [ ; ]

11 1.2 数据并发的问题 1. 脏读(Dirty Read) 脏读是指某个事务(A)读取另外事务(B)
1.2 数据并发的问题   1. 脏读(Dirty Read)   脏读是指某个事务(A)读取另外事务(B) 尚未提交的更改数据,并在这个数据的基础上操 作。如果恰巧 B事务回滚,那么 A事务读到的数 据根本是不被承认的。   2. 不可重复读(Unrepeatable Read)   不可重复读是指 A事务读取了 B事务已经提 交的更改数据。  

12 1.2 数据并发的问题 3. 幻象读(Phantom Read) A事务读取B事务提交的新增数据,这时 A事 务将出现幻象读的问题。
1.2 数据并发的问题    3. 幻象读(Phantom Read)   A事务读取B事务提交的新增数据,这时 A事 务将出现幻象读的问题。   4. 第一类丢失更新   A事务撤销时,把已经提交的B事务的更新数 据覆盖了。   5. 第二类丢失更新 A事务覆盖B事务已经提交的数据,造成 B事务 所做操作丢失。

13 11.3 锁Lock 1. 锁Lock 数据库中的锁是指一种软件机制,用来控制防 止某个用户(进程会话)在已经占用了某种数据资
  数据库中的锁是指一种软件机制,用来控制防 止某个用户(进程会话)在已经占用了某种数据资 源时,其他用户做出影响本用户数据操作或导致数 据非完整性和非一致性问题发生的手段。   2.锁的类型   共享锁(S): SQL Server 中,共享锁用于所 有的只读数据操作。   修改锁(U):在修改操作的初始化阶段用来 锁定可能要被修改的资源,避免使用共享锁造成的 死锁现象。

14 11.3 锁Lock 独占锁(X):为修改数据而保留的,它所锁 定的资源,其他事务不能读取也不能修改。
  结构锁:结构锁分为结构修改锁(Sch-M)和 结构稳定锁(Sch-S)。   意向锁:意向锁说明SQL Server有在资源的低 层获得共享锁或独占锁的意向。   批量修改锁(BU):批量复制数据时使用批 量修改锁。   键范围锁:在使用可序列化事务隔离级别时, 对于TRANSACT-SQL语句读取的记录集,键范围 锁可以隐式保护该记录集中包含的行范围。

15 11.4 事务隔离级别 1.设置事务隔离级别 SET TRANSACTION ISOLATION LEVEL
11.4 事务隔离级别   1.设置事务隔离级别 SET TRANSACTION ISOLATION LEVEL     { READ UNCOMMITTED     | READ COMMITTED     | REPEATABLE READ     | SNAPSHOT     | SERIALIZABLE     }[ ; ]

16 11.4 事务隔离级别 1.设置事务隔离级别 READ UNCOMMITTED:指定语句可以读取 已由其他事务修改但尚未提交的行。
11.4 事务隔离级别   1.设置事务隔离级别   READ UNCOMMITTED:指定语句可以读取 已由其他事务修改但尚未提交的行。   READ COMMITTED:指定语句不能读取已由 其他事务修改但尚未提交的数据。这样可以避免脏 读。   REPEATABLE READ:指定语句不能读取已 由其他事务修改但尚未提交的行,并且指定,其他 任何事务都不能在当前事务完成之前修改由当前事 务读取的数据。 

17 11.4 事务隔离级别 1.设置事务隔离级别 SNAPSHO:指定事务中任何语句读取的数据 都将是在事务开始时便存在的数据的事务上一致的
11.4 事务隔离级别   1.设置事务隔离级别   SNAPSHO:指定事务中任何语句读取的数据 都将是在事务开始时便存在的数据的事务上一致的 版本。   SERIALIZABLE:指定:  (1)语句不能读取已由其他事务修改但尚未提 交的数据;  (2)任何其他事务都不能在当前事务完成之前 修改由当前事务读取的数据;  (3)在当前事务完成之前,其他事务不能使用 当前事务中任何语句读取的键值插入新行。

18 11.4 事务隔离级别 2. 设置事务隔离级别案例 【案例11.1】 在表Employyes和Departments上设置隔离级别为
11.4 事务隔离级别   2. 设置事务隔离级别案例 【案例11.1】   在表Employyes和Departments上设置隔离级别为 REPEATABLE READ ,实现其他任何事务都不能在 当前事务完成之前修改由当前事务读取的数据。 USE eTradeINfo GO SET TRANSACTION ISOLATION LEVEL REPEATABLE READ BEGIN TRANSACTION SELECT * FROM Employees SELECT * FROM Departments COMMIT TRANSACTION

19 Management Studio”管理窗口中,按照事务控制结构 和锁机制,编写和调试以下代码。
案例分析   使用案例数据库eTradeInfo,在“SQL Server Management Studio”管理窗口中,按照事务控制结构 和锁机制,编写和调试以下代码。   1. 编写一个存储过程,输入某客户姓名(customer)和 订单前订日期(Order_Date) ,修改该客户自该日期以来订 购的商品的单价降低10%。如果修改出现问题回滚事务。   2. 输入仓库编号,输出其库存商品数量之和以及商品种 类之和,为保证在统计汇总过程中出现数据不一致问题,使 用事务和锁机制,锁定查询统计过程。   3. 编写存储过程,输入合同编号,如果合同尚未到期, 则将到期日期延长 3 个月,之后设置一个事务回滚点,接下 来在合同明细表中讲该合同的商品单价提价5%。

20 1.正确用 “ SQL Server Management Studio ” 和 T-SQL 语句,使用事务格式编写存储过程,
案例分析 要求:   1.正确用 “ SQL Server Management Studio ” 和 T-SQL 语句,使用事务格式编写存储过程, 并在 “ SQL编辑器 ” 窗口中调试;   2.掌握锁与事务的关系和使用方法。 问题:   1. 理解事务和锁有何联系?   2. 如何在事务中使用锁?   3. 如何解决事务隔离等级的设置? 讨论:   为什么要使用事务和锁?编写后台多任务 处理程序时如何解决数据并发问题?

21 事务和锁是数据库应用、开发和管理的重要技 术。在多用户开发应用环境中,使用事务和锁机制 是保证数据一致性、完整性和安全性的重要手段。
本章小结   事务和锁是数据库应用、开发和管理的重要技 术。在多用户开发应用环境中,使用事务和锁机制 是保证数据一致性、完整性和安全性的重要手段。   通过人工对事务、锁和事务等级的控制,可以 有效避免数据脏读等一系列数据并发操作问题。


Download ppt "第11章 事务与锁 11.1 事务Transact 11.2 数据并发的问题 11.3 锁Lock 11.4 事务隔离级别."

Similar presentations


Ads by Google