首頁 資料庫 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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何安裝、解除安裝、重設Windows伺服器備份 如何安裝、解除安裝、重設Windows伺服器備份 Mar 06, 2024 am 10:37 AM

WindowsServerBackup是WindowsServer作業系統自帶的功能,旨在協助使用者保護重要資料和系統配置,並為中小型和企業級企業提供完整的備份和復原解決方案。只有執行Server2022及更高版本的使用者才能使用此功能。在本文中,我們將介紹如何安裝、解除安裝或重設WindowsServerBackup。如何重置Windows伺服器備份如果您的伺服器備份遇到問題,備份所需時間過長,或無法存取已儲存的文件,那麼您可以考慮重新設定WindowsServer備份設定。要重設Windows

Lock wait timeout exceeded; try restarting transaction - 如何解決MySQL報錯:事務等待逾時 Lock wait timeout exceeded; try restarting transaction - 如何解決MySQL報錯:事務等待逾時 Oct 05, 2023 am 08:46 AM

Lockwaittimeoutexceeded;tryrestartingtransaction-如何解決MySQL報錯:事務等待逾時在使用MySQL資料庫時,有時可能會遇到一個常見的錯誤:Lockwaittimeoutexceeded;tryrestartingtransaction,該錯誤表示事務等待逾時。這個錯誤通常發生在並且

MySQL事務處理:自動提交與手動提交的區別 MySQL事務處理:自動提交與手動提交的區別 Mar 16, 2024 am 11:33 AM

MySQL事務處理:自動提交與手動提交的差異在MySQL資料庫中,事務是一組SQL語句的集合,要麼全部執行成功,要麼全部執行失敗,保證了資料的一致性和完整性。在MySQL中,事務可以分為自動提交和手動提交,其區別在於事務提交的時機以及對事務的控制範圍。以下將詳細介紹自動提交和手動提交的區別,並給出具體的程式碼範例來說明。一、自動提交在MySQL中,如果沒有顯示

C++中運算子重載問題與解決方法概述 C++中運算子重載問題與解決方法概述 Oct 08, 2023 pm 01:02 PM

C++中運算子重載問題和解決方法概述引言:運算子重載是C++語言的一個重要特性,它允許程式設計師自訂現有的運算子來操作自訂的資料型別。但是,運算子重載需要慎重使用,因為一旦使用不當或過度使用,會導致程式碼可讀性降低、出現歧義和效率降低等問題。本文將概述C++中運算子重載的常見問題,並提供對應的解決方法和程式碼範例。一、運算子重載的問題1.1歧義問題在運算子重載

詳解win10病毒隔離的位置 詳解win10病毒隔離的位置 Dec 25, 2023 pm 01:45 PM

win10病毒隔離的文件一般都會固定的存放位置,很多用戶想打開隔離文件恢復自己的文件,但是不知道在哪裡存著,其實通常在c盤安全軟體的隔離文件夾裡就能找到。 win10病毒隔離的檔案在哪裡答:在C:\ProgramData\Microsoft\WindowsDefender\Quarantine資料夾裡,我們可以開啟此電腦,直接將該檔案路徑複製貼上到上方路徑列裡找到他。 win10病毒隔離資料夾介紹:1、在win10中「Quarantine」檔案通常需要一定權限打開,建議使用管理員身分開啟該檔案。 2、

PHP PDO教學:從基礎到精通的進階指南 PHP PDO教學:從基礎到精通的進階指南 Feb 19, 2024 pm 06:30 PM

1.PDO簡介PDO是PHP的擴充庫,它提供了一個物件導向的方式來操作資料庫。 PDO支援多種資料庫,包括Mysql、postgresql、oracle、SQLServer等。 PDO使開發人員能夠使用統一的api來操作不同的資料庫,這使得開發人員可以在不同的資料庫之間輕鬆切換。 2.PDO連接資料庫要使用PDO連接資料庫,首先需要建立一個PDO物件。 PDO物件的建構函式接收三個參數:資料庫類型、主機名稱、資料庫使用者名稱和密碼。例如,以下程式碼建立了一個連接到mysql資料庫的物件:$dsn="mysq

Java資料庫連線如何處理事務和並發? Java資料庫連線如何處理事務和並發? Apr 16, 2024 am 11:42 AM

事務確保資料庫資料完整性,包括原子性、一致性、隔離性和持久性。 JDBC使用Connection介面提供交易控制(setAutoCommit、commit、rollback)。並發控制機制協調並發操作,使用鎖或樂觀/悲觀並發控制來實現事務隔離性,以防止資料不一致。

MongoDB技術開發中遇到的事務管理問題解決方案分析 MongoDB技術開發中遇到的事務管理問題解決方案分析 Oct 08, 2023 am 08:15 AM

MongoDB技術開發中遇到的事務管理問題解決方案分析隨著現代應用程式變得越來越複雜和龐大,對資料的事務處理需求也越來越高。作為一種流行的NoSQL資料庫,MongoDB在資料管理方面有著出色的效能和擴展性。然而,MongoDB在資料一致性和事務管理方面相對較弱,為開發人員帶來了挑戰。在本文中,我們將探討在MongoDB開發中遇到的事務管理問題,並提出一些解

See all articles