--================================================
--准备数据
GO
CREATE DATABASE DB5
GO
USE DB5
GO
CREATE TABLE TB1
(
ID INT PRIMARY KEY,
V1 INT,
RV ROWVERSION
)
GO
INSERT INTO TB1(ID,V1)
SELECT 1,1
UNION
SELECT 2,2
GO
SELECT * FROM TB1
--================================================
--设置数据库可以使用SNAPSHOT隔离级别
ALTER DATABASE DB5 SET ALLOW_SNAPSHOT_ISOLATION ON
GO
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
BEGIN TRAN tr1
SELECT * FROM TB1
WAITFOR DELAY '0:0:05'
SELECT * FROM TB1

--在事务开启后打开另外事务修改数据并提交

--=====================================================
在快照隔离级别下,在事务执行过程中,数据已被外部事务修改并且提交,但查询会得到过时数据(取决于生成快照的第一次时间点在外部事物发生前还是发生后),对过时数据修改会报以下错误:
快照隔离事务由于更新冲突而中止。您无法在数据库'DB5'中使用快照隔离来直接或间接访问表 'dbo.TB1',以便更新、删除或插入已由其他事务修改或删除的行。请重试该事务或更改 update/delete 语句的隔离级别。

--推断:快照事务隔离级别下,在第一次查询时建立快照,并在后续访问快照并持续到事务结束,因此数据可能过时

--建议:1)避免在快照事务隔离级别下修改数据
       2)确定业务允许访问过时数据

优点:有效较少读和写得阻塞
缺点:维护行版本需要额外的开销,且可能读取到旧数据,在快照隔离级别下修改数据会引发事务冲突。

参考:http://www.cnblogs.com/lyhabc/articles/3219693.html

Transaction And Lock--快照事务隔离级别的更多相关文章

  1. MySQL事务隔离级别,锁(转)

    add by zhj: 本文针对的是MySQL的InnoDB存储引擎,不适用于MySQL的其它存储引擎和其它数据库 原文:MySQL数据库事务隔离级别(Transaction Isolation Le ...

  2. mysql事务隔离级别与设置

    mysql数据库,当且仅当引擎是InnoDB,才支持事务: 1.隔离级别 事务的隔离级别分为:未提交读(read uncommitted).已提交读(read committed).可重复读(repe ...

  3. oracle中事务处理--事务隔离级别

    概念:隔离级别定义了事务与事务之间的隔离程度. ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别(这是国际标准化组织定义的一个标准而以,不同的数据库在实现时有所不同). 隔离级别 脏读 ...

  4. SQL锁机制和事务隔离级别

    摘自:http://www.cnblogs.com/haiyang1985/archive/2009/02/27/1399641.html 锁机制 NOLOCK和READPAST的区别. 1.     ...

  5. 14.3.2.1 Transaction Isolation Levels 事务隔离级别

    14.3.2 InnoDB Transaction Model InnoDB 事务模型 14.3.2.1 Transaction Isolation Levels 事务隔离级别 14.3.2.2 au ...

  6. mysql事务之一:MySQL数据库事务隔离级别(Transaction Isolation Level)及锁的实现原理

    一.数据库隔离级别 数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说说修改事务隔离级别的方法: 1.全局修改,修改mysql.ini配置文件,在最后加上 1 #可选参数 ...

  7. Oracle Database Transaction Isolation Levels 事务隔离级别

    Overview of Oracle Database Transaction Isolation Levels Oracle 数据库提供如下事务隔离级别: 已提交读隔离级别 可串行化隔离级别 只读隔 ...

  8. MSSQL事务隔离级别详解(SET TRANSACTION ISOLATION LEVEL)

    控制到 Transact-SQL 的连接发出的 SQL Server 语句的锁定行为和行版本控制行为. TRANSACT-SQL 语法约定 语法   -- Syntax for SQL Server ...

  9. autocommit 隔离级别 next lock gap lock 事务隔离级别和锁

    autocommit 隔离级别 https://www.ibm.com/developerworks/cn/opensource/os-mysql-transaction-isolation-leve ...

随机推荐

  1. 分布式锁之二:zookeeper分布式锁2

    示例: package com.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.zoo ...

  2. 1039 Course List for Student

    题意:给出K门课程(编号1~K)以及报名该课程的学生,然后有N个学生查询,对于每一个查询,输出该学生所报的相关课程编号,且要求编号按增序输出. 思路:题目不难,解析略.(本来用map直接映射,用STL ...

  3. model进阶(queryset,中介模型,查询优化,extra)

    queryset 方法 ############# 可切片 def queryTest(request): ret = models.Atricle.objects.all() 数据库查询 print ...

  4. django-settings.py配置

    django settings 详细资料 ############ 开始项目 python3.5 pip -m install django==1.11.7 指定版本安装 pip3 install d ...

  5. 异步通知与异步I/O

    异步通知:很简单,一旦设备准备好,就主动通知应用程序,这种情况下应用程序就不需要查询设备状态,这是不是特像硬件上常提的"中断的概念".上边比较准确的说法其实应该叫做"信号 ...

  6. SQL SERVER2008修改数据库名相关的脚本

    --修改数据库名 ----1.首先查找数据库是否占用,杀掉占用的id select spid from master.dbo.sysprocesses where dbid=db_id('ClothC ...

  7. Linux - 目录结构及文件操作

    根目录 “/”:Linux 系统中最高层的目录 这个就是根目录 用 / 表示根目录 bin 目录:存放可执行文件 bin 目录下的文件都是平常使用的命令 在 Linux 系统中,一切都是文件 sbin ...

  8. AJAX如何获取从前台传递过来的数据然后在通过servle传递给后台

    1 用 request.getParameter接收值 <% String id1=request.getParameter("id"); out.print(id1); % ...

  9. pandas层级索引1

    层级索引(hierarchical indexing) 下面创建一个Series, 在输入索引Index时,输入了由两个子list组成的list,第一个子list是外层索引,第二个list是内层索引. ...

  10. C#中用SerialPort类中的Write()方法发送十六进制数

    在C#中用SerialPort类中的Write()方法向串口发送十六进制数的方法: MSDN对SerialPort::Write()是这样解释的: 将数据写入串行端口输出缓冲区. 重载列表   名称 ...