- 1、本文档共72页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章: 并发控制 事务 并发的概念 并发执行可能产生的问题 封锁协议 活锁与死锁 可串行化调度 两段封锁协议 封锁粒度 基于时间印的并发控制 事务的概念 事务: 是用户定义的一个数据库操作序列, 这些操作要么全做, 要么全不做, 是一个不可分割的工作单位 访问并可能更新各种数据项的一个程序执行单元 事务和程序 一个程序中包含多个事务 事务的定义: 显示定义, 隐含定义 SQL的事务定义 BEGIN TRANSACTION - 开始 COMMIT - 提交:写到硬盘的物理数据库中 ROLLBACK - 回滚:故障导致对数据库更新操作失败,滚回到事务开始的状态 事务的概念 事务的性质 ACID 原子性 Atomicity 事务中包括的操作要么都做,要么都不做 一致性 Consistency 事务执行的结果从一个一致性状态变到另一个一致性状态 例如银行两个账户A和B: A-200 B+200 隔离性 Isolation 一个事务的执行不能被其他事务干扰 持久性 Durability 事务成功完成后,对数据库的改变是永久的,即使以后系统出现故障也不受影响 事务是恢复和并发控制的基本单位 隔离级别 ANSI标准SQL事务的4个隔离级别 0: 防止“丢失修改” 1: 防止“丢失修改、脏读” 2: 防止“丢失修改、脏读、不可重复读” 3: 可串行化 American National Standards Institute(ANSI——美国国家标准学会) 0:未提交读(事务隔离的最低级别,仅可保证不读取物理损坏的数据) 1:提交读(SQL Server 默认级别) 2:可重复读 3:可串行读(事务隔离的最高级别,事务之间完全隔离) 隔离级别 SQL 92 设置隔离级别 SET TRANSACTION ISOLATION LEVEL 语法: SET TRANSACTION ISOLATION LEVEL{ READ UNCOMMITTED?| READ COMMITTED?| REPEATABLE READ?| SERIALIZABLE ?} ANSI –92 SQL3 ANSI要求3级为事务的缺省隔离级别。 隔离级别 隔离级别允许不同类型的行为 隔离级别 脏读 不可重复读取 幻像 未提交读 是 是 是 提交读 否 是 是 可重复读 否 否 是 可串行读 否 否 否 隔离级别 幻象读取指的是两次集合查询之间返回了不一致的结果。在“可重复读”级别下依然能够发生。 SQL Server的隔离级别 SQL Server的3级隔离级别:(以前版本) 0: 防止“丢失修改” 1: 防止“丢失修改、脏读” 3: 防止“丢失修改、脏读、不可重复读” 2008版: SET TRANSACTION ISOLATION LEVEL ???? { READ UNCOMMITTED ?? ??| READ COMMITTED ??? ?| REPEATABLE READ ?? ??| SNAPSHOT ?? ?| SERIALIZABLE ????} SNAPSHOT :指定事务中任何语句读取的数据都将是在事务开始时存在的数据一致的版本。 REPEATABLE READ允许插入与当前事务所发出语句的搜索条件相匹配的新行 ,有幻影现象。 SQL Server的隔离级别 SNAPSHOT :返回最后提交的版本。不像没有快照的已提交读级别那样,这个查询不会被阻塞。 事务1 事务2 时间 Gustavo Achong gustavo0@ SQL Server的隔离级别 SQL Server缺省级别为1(读后立即释放) 用hold lock 选项加强s锁的限制,实现隔离级别3(ANSI-可串行化) 例如:要读两次时,需要使用hold lock Sybase中三级封锁协议的实现 设定隔离级别, 缺省方式为1 在会话层设定 set transaction isolation level {0,1,3|read uncommited, read committed, serializable} 系统提供的存储过程将在级别1下面执行, 它不会受会话层影响 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ GO BEGIN TRANSACTION SELECT * FROM publishers SELECT * FROM authors ... COMMIT TRANSACTION Sybase中三级封锁协议的实现 在语法层上设定: 在select, declare cursor语句中增加选项 select ... A
文档评论(0)