快照隔离(Snapshot Isolation)简单介绍和例子

简介:

快照隔离(Snapshot Isolation)特性

1、写入程序不会阻碍读取程序

2、Snapshot isolation must be enabled for DB

ALTER DATABASE 数据库 SET allow_snapshot_isolation ON

3、Snapshot isolation must be enabled for connection Set transaction isolation level snapshot

4、UPDATE transactions keep old versions of data in a linked list

5、新的隔离级别提供了以下优点:

  •  提高了只读应用程序的数据可用性
  •  允许在OLTP环境中执行非阻止读取操作
  • 可对写入事务进行自动的强制冲突检测

例子

首先创建数据库

复制代码
create database demo
use demo
ALTER DATABASE demo SET allow_snapshot_isolation ON
CREATE TABLE test
(
tid INT NOT NULL primary key,
tname VARCHAR(50) NOT NULL
)
INSERT INTO test VALUES(1,'version1')
INSERT INTO test VALUES(2,'version2')
复制代码

然后建立连接,在测试的时候一个连接其实就是相当于新建一个查询。

连接一:

USE demo
BEGIN TRAN
UPDATE test SET tname='version3' WHERE tid=2
SELECT * FROM test

可以看到我们在连接一种修改了数据库中的内容,查询结果为:

tid         name

1        version1

2        version3

连接二:

USE demo
SET transaction isolation level snapshot
SELECT * FROM test

查询结果为:

tid         name

1        version1

2        version2

总结

从查询结果中我们可以看到如果使用了快照隔离(snapshot isolation)技术以后每一个被修改的数据项都保留了一个备份。我们如果选择在快照隔离级别下查找,那么我们能够找到旧的版本。

PS:

如果我们这里直接使用查询语句

连接三:

use demo
SELECT * FROM test

则会提示连接超时,这是因为我们在连接一种是用了事务的概念,在没有提交事务一的情况下其他连接无法再普通模式下访问被事务操纵的数据。

我们在连接一种加入

COMMIT TRAN

命令,这样事务提交,则连接三可以访问,查询结果为连接一修改后的结果:

tid         name

1        version1

2        version3








本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2010/10/13/2297081.html,如需转载请自行联系原作者


目录
相关文章
|
6月前
|
SQL 数据库 数据库管理
事务管理,事务的概念(原子性、一致性、隔离性和持久性(ACID特性))、事务的控制(BEGIN、COMMIT和ROLLBACK)
事务管理,事务的概念(原子性、一致性、隔离性和持久性(ACID特性))、事务的控制(BEGIN、COMMIT和ROLLBACK)
|
11月前
快照一致性组
快照一致性组
57 1
|
SQL 安全 算法
精通Java事务编程(7)-可串行化隔离级别之两阶段锁定(2PL,two-phase locking)
近30年,DB只有一种广泛使用的串行化算法:两阶段加锁 1 2PL不是2PC 请注意,虽然两阶段锁定(2PL)听起来非常类似于两阶段提交(2PC),但是完全不同概念
228 0
|
SQL 存储 Oracle
精通Java事务编程(3)-弱隔离级别之快照隔离和可重复读
表面看,RC已满足事务所需的一切特征:支持中止(原子性),防止读取不完整的事务结果,并防止并发写的混乱。这点很关键!为我们的开发省去一大堆麻烦。
124 0
|
消息中间件 JavaScript 小程序
MySQL 底层之 MVCC、回滚段、一致性读、锁定读
MySQL 底层之 MVCC、回滚段、一致性读、锁定读
|
6月前
|
SQL Oracle 关系型数据库
Oracle只读事务和PolarDB只读事务的差异
在交付PolarDB的过程中我们也遇到了只读事务造成的困扰,本文主要介绍Oracle只读事务和PolarDB只读事务的不同。
198 0
Oracle只读事务和PolarDB只读事务的差异
|
SQL Oracle 关系型数据库
事务特性及隔离问题
事务特性及隔离问题
102 0
|
关系型数据库 MySQL
幻读“异常”引出的快照读创建点问题
幻读“异常”引出的快照读创建点问题
|
Oracle 安全 Java
Hibernate的事务的隔离性
Hibernate的事务的隔离性
148 0