快照隔离(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,如需转载请自行联系原作者


目录
相关文章
|
人工智能 自然语言处理 BI
草料二维码表单功能:轻松收集和管理数据
表单作为草料二维码的高级功能之一,可用于收集格式统一的数据。你可以通过组合姓名、图片、检查项等组件搭建出电子表单,关联到二维码中,扫码填写表单即可更快速、规范的收集数据。 这些数据保存在账号下形成动态档案,可以导出Excel或PDF进行存档;也可以根据企业要求自定义PDF导出格式。
508 2
|
关系型数据库 MySQL Go
MySQL数据库安装(超详细完整步骤)
MySQL数据库安装(超详细完整步骤)
1947 1
|
11月前
|
自然语言处理 Python
如何使用自然语言处理库`nltk`进行文本的基本处理
这段Python代码展示了如何使用`nltk`库进行文本的基本处理,包括分词和词频统计。首先需要安装`nltk`库,然后通过`word_tokenize`方法将文本拆分为单词,并使用`FreqDist`类统计每个单词的出现频率。运行代码后,会输出每个词的出现次数,帮助理解文本的结构和常用词。
313 1
|
10月前
|
人工智能 算法框架/工具 C++
《C++ 人工智能模型的跨环境迁移之道:突破限制,无缝衔接》
在AI领域,C++因其高效性能和资源利用率,成为模型训练与部署的关键选择。然而,不同环境间的模型迁移面临硬件差异、软件依赖及数据兼容性等挑战。本文探讨了模型迁移的重要性、常见场景及应对策略,包括硬件适配、软件依赖管理和数据适配与验证,旨在帮助开发者和企业克服这些障碍,实现模型的高效迁移与应用。
242 11
|
11月前
|
算法 Linux 开发者
深入探究Linux内核中的内存管理机制
本文旨在对Linux操作系统的内存管理机制进行深入分析,探讨其如何通过高效的内存分配和回收策略来优化系统性能。文章将详细介绍Linux内核中内存管理的关键技术点,包括物理内存与虚拟内存的映射、页面置换算法、以及内存碎片的处理方法等。通过对这些技术点的解析,本文旨在为读者提供一个清晰的Linux内存管理框架,帮助理解其在现代计算环境中的重要性和应用。
|
关系型数据库 MySQL 数据库
MySQL高级篇——MVCC多版本并发控制
什么是MVCC、快照读与当前读、隐藏字段、Undo Log版本链、ReadView、举例说明、InnoDB 解决幻读问题
MySQL高级篇——MVCC多版本并发控制
|
C++
20 C++ - 面向对象程序设计案例
20 C++ - 面向对象程序设计案例
230 0
|
JavaScript Java BI
Springboot+vue 实现汽车租赁系统(毕业设计二)(前后端项目分离)
这篇文章介绍了如何使用Springboot和Vue实现一个前后端分离的汽车租赁系统,包括系统的功能模块和管理员与业务员的使用界面。
Springboot+vue 实现汽车租赁系统(毕业设计二)(前后端项目分离)
|
12月前
|
程序员 Go 区块链
GitHub 用户福利,符合条件可领取约 1500 元现金
Starknet 空投,GitHub 用户可以试下,有资格的可以领取代币,最终可提现 1500 元左右。
186 0
|
存储 SQL 人工智能
为什么你的RAG不起作用?失败的主要原因和解决方案
企业在尝试使用检索增强生成(RAG)时遇到困难,因为系统效果不佳且难以优化。问题主要源于语义不协调,即任务理解与底层知识间的不一致。由于向量嵌入技术的不透明性,诊断和解决这个问题变得复杂。本文旨在揭示RAG失败的原因并提供改进策略。文章探讨了RAG的工作原理,强调了语义不协调的影响,并介绍了如何通过增加结构化数据和使用语义+相关性排名来提升RAG性能。此外,建议将AI视为工具而非完整解决方案,并提醒读者当前技术仍处早期阶段,需注意挑战。
579 0