SQL Server 的 6 种隔离级别

背景知识:

高并发一直以来是数据的所追求的目标,然,一般事物是有两面性的。不多说了,等下变邪教了。下面直接看

并发性最高的隔离级别 read uncommitted

1、

read uncommitted 级别

比方这时有两个连接A,B;其中A想把表中的值由111改成222,表如下图

就在A改到一半的时B去读数据,结果看到的可能就是 211 这样的数据。这个隔离级别数据库的并发性是提高了,可是事务就不完整了。

它内部是用什么方式来提高并发的呢?

在这个隔离级别时读取数据是不用加锁的,也就是说B没有对资源加共享锁。这样就不会因为A在资源上

的排它锁而造成阻塞,有的人一定会问你不是说不用加锁吗?为什么会有排它锁,隔离级别是用来控制读

操作的,它不控制写操作,只是通过读操作影响写操作。

2、read committed 级别

它是SQL Server 的默认隔离级别,从锁的角度上来说,读完数据后就释放锁,不会一直持有锁到事务结束,它是问题是

如果在第一次读完数据后,别的连接又插入了新的数据,它再次去读(这两次读取是在同一个事务中的),读到的结果是不

一样的。

3、repeatable read 级别

它是在整个事务过程中,一直持有资源的锁,比如它读了第一行,它会在整个事务中一直持有第一行的共享锁。因为有共享

锁的存在所以就不会有让第二个连接去修改它读过的数据(要修改数据一定得到X锁,而资源上以有S锁了,上不了X锁)。

4、serializable       级别

这个直接说有点难懂,还是上例子吧:

比如有这么一个查询,它属于事务 A

Select * from Student where ID< 100;

.......................................

Select * from Student where ID< 100;

...................................... -- 这里是一些别的代码,所以说这是一个比较长的事务,它不只是只有一句select

我们假设表里只有一行,它的ID=1;在repeatable read级别下别人想在A执行的过程中去修改ID = 1 这行的值是

不可能的。原因上面说了,但是别的连接还是可以插入一个ID = 2的行。如果A再次读取时就会返回两行。

serializable 就不只是锁定ID = 1 的这一行了,它会锁定ID<100个个范围。这个别人想插入ID=2的行也就不行了

它解决了repeatable read 中的‘幻读’问题。

--------------------------------------------------------------------------------------------------------------------------------------------------

前四个都是通过对资源上怎么样的锁的方式,来实现各个事务的隔离的,下面要说的这两种方式,它不用锁,而是创建当前资源的复本(对资源进行复制)。

5 snapshot 级别

它保证读取的行是提交过的。读完后自己复制一份,以后自己就用这个复本。所以它可以实现可重复读(repeatable read),也就是说

别人都更新了,它还是读自己的久版本。

6 read committed snapshot 级别

它读取的数据不是事务启动前最后提交的版本,而是语句启动前最后提交的行。这样就不用都是读自己的久版本了。

总结:

说了这么多还没有告诉大家怎么进行设置。

第一大类、

也就是前四种的设置方法是

1、 连接级 set transaction isolation level read committed | read uncommitted | repeatable read | serializable

2、 单个查询级 select ... from table_Name with(isolationName)

例子:

select * from myTable with(readCommitted);

看到没有这里的isolationName 是‘readcommitted‘ 不是 ‘read committed‘区别在于它没有空格!

第二大类、

后两种

alter database DBName set allow_snapshot_isolation off|on;

alter database DBName set read_committed_snapshot off|on;

时间: 2024-12-17 17:52:21

SQL Server 的 6 种隔离级别的相关文章

SQL Server的四种隔离级别(转)

转自:https://www.cnblogs.com/cnxcfeng/articles/1162341.html SQL Server的四种隔离级别知识点整理,特别制作了流程图,方便以后查看! SET TRANSACTION ISOLATION LEVEL{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE } 一.未提交读READ UNCOMMITTED(脏读)意义:包含未提交数据的读.例如,在多用户环境下,

浅析SQL Server在可序列化隔离级别下,防止幻读的范围锁的锁定问题

原文:浅析SQL Server在可序列化隔离级别下,防止幻读的范围锁的锁定问题 本文出处:http://www.cnblogs.com/wy123/p/7501261.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) 数据库在处理并发事物的过程中,在不同的隔离级别下有不同的锁表现,在非可序列化隔离级别下,存在着脏读,不可重复读,丢失更新,幻读等情况.本文不讨论脏读和不可重复读以及丢失更新的情形,仅讨论幻读,幻

SQL Server 之 事务与隔离级别实例讲解

SQL Server 实现了6个隔离级别来防止并发情况下,类似企图并发的访问或修改同一数据时问题的发生.本文将带你体验全部6个隔离级别.正如你接下来将看到的,你将理解每个隔离级别所能达成的效果以及何时使用它. 一.事务简介 SQL Server的6个隔离级别中有5个是用于隔离事务的,它们因而被称作事务隔离级别.另外的一个工作于语句级别. 在现实中要求多个数据修改操作必须要么完全成功要么什么也没发生的例子.当数据被合并到数据库时,可能有多个表需要更新.当顾客下订单时,Order表.Invoice

【转修正】sql server行版本控制的隔离级别

在SQL Server标准的已提交读(READ COMMITTED)隔离级别下,一个读操作会和一个写操作相互阻塞.未提交读(READ UNCOMMITTED)虽然不会有这种阻塞,但是读操作可能会读到脏数据,这是大部分用户不能接受的.有些关系型数据库(例如Oracle)使用的是另一种处理方式.在任何一个修改之前,先对修改前的版本做一个复制[WX1] ,后续的一切读操作都会去读这个复制的版本,修改将创建一个新的版本.在这种处理方式下,读.写操作不会相互阻塞.使用这种行版本控制机制的好处,是程序的并发

SQL事务的四种隔离级别和MySQL多版本并发控制

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的那些改变时可见的,那些是不可见的.低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销. ReadUncommitted(读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结构.本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少.读取未提交的数据,也被称之为脏读(Dirty Read) ReadCommitted(读取提交内容) 这是大多数数据库系统的默认隔离级别(但不是MySQL默认的).它

SQL事务的四种隔离级别

1未提交读(Read uncommitted):完成不锁表,所以会出现脏数据.2提交读(Read committed):1.事务1中update才锁表,可以select到最新数据. 事务2select查不到数据. 会一直等.加上WITH (NOLOCK)就可以读了. 2.select是不锁表,所以其他事务可以修改数据.当有两个select时, 第二个select会出现脏数据.不可重复读. 3可重复读(Repeatable read): 解决提交读不可重复读的问题的,两次查询到的结果一致. 这只能

网上资料笔记总结!!数据库事务并发问题,锁机制和对应的4种隔离级别

数据库事务并发问题 数据库的操作通常为写和读,就是所说的CRUD:增加(Create).读取(Read).更新(Update)和删除(Delete).事务就是一件完整要做的事情.事务是恢复和并发控制的基本单位.事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少.事务在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序.是数据库中各种数据项的一个程序执行单元.事务是用户定义的一个操作序列(多个表同时读写).这些操作要么都做,要么都不做,是一个不可分割的工作单位

MySql四种隔离级别

什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交.如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作. 事务的 ACID 事务具有四个特征:原子性( Atomicity ).一致性( Consistency ).隔离性( Isolation )和持续性( Durability

数据库的四种隔离级别

一.事务的概念 一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有两种,当事务中的所有步骤全部成功执行时,事务提交.如果其中一个步骤失败,将发生回滚操作,撤消该事务已执行的操作. 二.事务的特性 ACID 事务具有四个特征:原子性( Atomicity ).一致性( Consistency ).隔离性( Isolation )和持续性( Durability ),简称为 ACID 特性. 三.多事务并发执行的问题 脏读(Drity Read):某个事务已更新一份数据,另一个事务