博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快照隔离(Snapshot Isolation)简单介绍和例子
阅读量:7038 次
发布时间:2019-06-28

本文共 1296 字,大约阅读时间需要 4 分钟。

快照隔离(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 demouse demoALTER DATABASE demo SET allow_snapshot_isolation ONCREATE 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 demoBEGIN TRANUPDATE test SET tname='version3' WHERE tid=2SELECT * FROM test

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

tid         name

1        version1

2        version3

连接二:

USE demoSET transaction isolation level snapshotSELECT * FROM test

查询结果为:

tid         name

1        version1

2        version2

总结

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

PS:

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

连接三:

use demoSELECT * FROM test

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

我们在连接一种加入

COMMIT TRAN

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

tid         name

1        version1

2        version3

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

你可能感兴趣的文章
command >/dev/null 2>&1 解说
查看>>
磁盘分区知识总结
查看>>
赵又廷解锁全新代言 低调睿智展现绅士质感
查看>>
精读《重新思考 Redux》
查看>>
GitHub Universe 大会总结:信息流推荐开源库,推出社区功能
查看>>
如何构建自定义人脸识别数据集
查看>>
码农,有趣的灵魂...
查看>>
Mac编译Hadoop源码
查看>>
【翻译】深入理解ES6的模块
查看>>
通用对话框QMessageBox
查看>>
JavaScript数组API汇总
查看>>
如何理解Java静态?
查看>>
用 Golang 写一个搜索引擎 (0x04) --- B + 树
查看>>
检测php网站是否已经被攻破的方法
查看>>
iOS VIPER架构实践(二):VIPER详解与实现
查看>>
[译]在HealthKit中用 Swift 进行睡眠分析
查看>>
【刷算法】数组中出现次数超过一半的数字
查看>>
基于ZK實現分布式锁
查看>>
ReactNative 进阶之Form表单组件封装
查看>>
JavaScript也能写WebAssembly
查看>>