데이터 베이스 MySQL 튜토리얼 SQL SERVER的锁机制(三)概述(锁与事务隔离级别)

SQL SERVER的锁机制(三)概述(锁与事务隔离级别)

Jun 07, 2016 pm 05:44 PM
server 사무 기구 개요 수준 격리

接上文SQL SERVER的锁机制(二)概述(锁的兼容性与可以锁定的资源) 五、锁与事务隔离级别 事务隔离级别简单的说,就是当激活事务时,控制事务内因 SQL 语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误。设置事务

接上文SQL SERVER的锁机制(二)——概述(锁的兼容性与可以锁定的资源)

 

五、锁与事务隔离级别

事务隔离级别简单的说,香港服务器,就是当激活事务时,控制事务内因SQL语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误。设置事务隔离级别将影响整条连接。

SQL Server 数据库引擎支持所有这些隔离级别:

· 未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据)

· 已提交读(数据库引擎的默认级别)

· 可重复读

· 可序列化(隔离事务的最高级别,事务之间完全隔离)

SQL Server 还支持使用行版本控制的两个事务隔离级别。一个是已提交读隔离的新实现,另一个是新事务隔离级别(快照)。

 

设置语句如下:

SET TRANSACTION ISOLATION LEVEL

    { READ UNCOMMITTED

    | READ COMMITTED

    | REPEATABLE READ

    | SNAPSHOT

    | SERIALIZABLE

    }

[ ; ]

 

(一)未提交读

未提交读是最低的事务隔离级别,允许读取其他事务已经修改但未提交的数据行。SQL SERVER 当此事务等级进行尝试读取数据时,不会放置共享锁,直接读取数据,所以忽略已存在的互斥锁。换句话说,即使该资源已经受到了独占锁的保护,当使用未提交读隔离级别时,此数据还是可以被读取,加快查询速度,但是会读取到别人未修改的数据,所以此种读取被称为脏读。此种隔离级别适合不在乎数据变更的查询场景。此隔离级别与SELECT 语句搭配 NOLOCK 所起到的效果相同

未提交读示例:

--1.--1.创建测试表

create table tbUnRead

(ID INT,

name nvarchar(20)

)

--2新增记录

insert tbUnRead 

select 1,'Tom'

union

select 2,'Jack'

--3开启事务,并进行更新

 

begin tran

update tbUnRead

set name='Jack_upd'

where ID=2

SELECT @@TRANCOUNT

事务查询结果如下:

 

set Transaction isolation level read uncommitted

--6查询数据,查询到的数据是修改之后的数据。

select * from tbUnRead where ID=2

如下图:

 

 

(二)已提交读

 

控制的隔离下读取数据。读取操作不会获取正被读取的数据上的共享锁(锁),因此不会阻塞正在修改数据的事务。同时,香港服务器,由于减少了所获取的锁的数量,因此最大程度地降低了锁定资源的开销。使用行版本控制的已提交读隔离和快照隔离旨在提供副本数据的语句级或事务级读取一致性。

示例一:设置READ_COMMITTED_SNAPSHOT为OFF

--1.创建测试表

create table tbUnRead

(ID INT,

name nvarchar(20)

)

--2新增记录

insert tbUnRead 

select 1,'Tom'

union

select 2,'Jack'

--3开启事务,并进行更新

 

begin tran

update tbUnRead

set name='Jack_upd'

where ID=2

SELECT @@TRANCOUNT

set Transaction isolation level read committed

--6查询数据,由于当前事务没有提交,所以无法查询数据

select * from tbUnRead where ID=2

6查询数据的结果 如下图:

 

 

 

示例二:设置READ_COMMITTED_SNAPSHOT为ON

use master

go

---创建测试数据库

create database read_committed_SNAPSHOT_Test

go

---激活数据行版本控制

alter database read_committed_SNAPSHOT_Test  set read_committed_SNAPSHOT on

go

 

use read_committed_SNAPSHOT_Test

go

 

--1.创建测试表

create table tbReadLevel

(ID INT,

name nvarchar(20)

)

 

--2新增记录

insert tbReadLevel

select 1,'测试'

go

select ID,name as "修改前数据from tbReadLevel

如下图:

 

go

--3开启事务,并进行更新

 

begin tran

update tbReadLevel

set name='Jack_upd'

where ID=1

SELECT @@TRANCOUNT

 

--查询数据,查询到的数据是上一次提交的数据

select * from tbReadLevel where ID=1

 5的查询结果如下图:

 

(三)可重复读

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Windows 서버 백업을 설치, 제거 및 재설정하는 방법 Windows 서버 백업을 설치, 제거 및 재설정하는 방법 Mar 06, 2024 am 10:37 AM

Windows 서버 백업을 설치, 제거 및 재설정하는 방법

잠금 대기 시간 초과; 트랜잭션 다시 시작 - MySQL 오류 해결 방법: 트랜잭션 대기 시간 초과 잠금 대기 시간 초과; 트랜잭션 다시 시작 - MySQL 오류 해결 방법: 트랜잭션 대기 시간 초과 Oct 05, 2023 am 08:46 AM

잠금 대기 시간 초과; 트랜잭션 다시 시작 - MySQL 오류 해결 방법: 트랜잭션 대기 시간 초과

MySQL 트랜잭션 처리: 자동 제출과 수동 제출의 차이점 MySQL 트랜잭션 처리: 자동 제출과 수동 제출의 차이점 Mar 16, 2024 am 11:33 AM

MySQL 트랜잭션 처리: 자동 제출과 수동 제출의 차이점

win10 바이러스 격리 위치에 대한 자세한 설명 win10 바이러스 격리 위치에 대한 자세한 설명 Dec 25, 2023 pm 01:45 PM

win10 바이러스 격리 위치에 대한 자세한 설명

Windows Server 2025 미리보기 버전은 업데이트를 환영하며 Microsoft는 내부자 테스트 경험을 개선합니다. Windows Server 2025 미리보기 버전은 업데이트를 환영하며 Microsoft는 내부자 테스트 경험을 개선합니다. Feb 19, 2024 pm 02:36 PM

Windows Server 2025 미리보기 버전은 업데이트를 환영하며 Microsoft는 내부자 테스트 경험을 개선합니다.

Golang 변수의 저장 위치와 메커니즘에 대한 심층 탐구 Golang 변수의 저장 위치와 메커니즘에 대한 심층 탐구 Feb 28, 2024 pm 09:45 PM

Golang 변수의 저장 위치와 메커니즘에 대한 심층 탐구

PHP PDO의 강력한 기능을 마스터하세요: 고급 쿼리 및 업데이트 PHP PDO의 강력한 기능을 마스터하세요: 고급 쿼리 및 업데이트 Feb 20, 2024 am 08:24 AM

PHP PDO의 강력한 기능을 마스터하세요: 고급 쿼리 및 업데이트

C++의 연산자 오버로딩 문제 및 해결 방법 개요 C++의 연산자 오버로딩 문제 및 해결 방법 개요 Oct 08, 2023 pm 01:02 PM

C++의 연산자 오버로딩 문제 및 해결 방법 개요

See all articles