Heim Datenbank MySQL-Tutorial SQL Server 事务和锁详解

SQL Server 事务和锁详解

Jun 07, 2016 pm 05:48 PM
sql server

本文章简单的介绍了关于SQL Server,事务和锁的常见问题与用法同时为初学者提供好的参考意见,有需要的可以参考一下。

最近在项目中进行压力测试遇到了的死锁问题,简言之,如下的代码在 SERIALIZABLE 隔离级别造成了死锁:

Nach dem Login kopieren
 代码如下 复制代码
SELECT @findCount=COUNT(id) FROM MyTable
WHERE [fk_related_id]=@Argument

IF (@findCount > 0)
BEGIN
	ROLLBACK TRANSACTION
	RETURN ERROR_CODE
END

INSERT INTO MyTable ([fk_related_id],…)
VALUES (@Argument,…)

COMMIT TRANSACTION
RETURN SUCCESS_CODE
Nach dem Login kopieren
在搞清楚这个问题的过程中做了不少的实验,与各位共享。这一篇是开篇,主要说明的是 SQL Server 的四种(其实还有别的)经典的事务隔离级别,以及在不同的隔离级别下锁的使用手段,以及所带来的不同的数据一致性。

SQL Server 中锁的种类(Schema操作就暂时不涉及了)

锁类型 描述
(Shared Lock) 用于只读操作数据锁定
(Update Lock) 用于数据的更新,在数据真正的需要更新的时候会申请升级为X锁。
X(Exclusive Lock) 独占锁,用于数据的更改。
Key-Range Lock(稍后讨论) 仅仅在 Serializable 隔离级别保护数据,以避免任何有可能使得本事务第二次读取信息产生错误的数据插入操作

各个事务隔离级别下锁的使用

SQL Server 中有四种事务隔离级别,具体的大家去参建 MSDN。下面列出在不同的事务隔离级别下这些锁是如何使用的:

隔离级别 读数据锁状态 写数据锁状态 锁持有时间
Read Uncommitted 不获得任何锁 不获得任何锁  
Read Committed 数据获得S锁 对于 INSERT、DELETE、UPDATE的执行,获得X锁;对于UPDATE的标记,获得U锁; 读完即释放,并不持有至事务结束。
Repeatable Read 数据获得S锁 对于 INSERT、DELETE、UPDATE的执行,获得X锁;对于UPDATE的标记,获得U锁; 持有至事务结束
Serializable 数据获得S锁,同时获得Key-Range锁。 对于 INSERT、DELETE、UPDATE的执行,获得X锁;对于UPDATE的标记,获得U锁,同时获得Key-Range锁。 持有至事务结束

我们可以利用这些知识形象说明各个隔离级别下的数据一致性:

Read Uncommitted 级别

(1)脏读

image

(2)更新丢失

image

(3)不可重复读

image

(4)幻读

clip_image001

Read Committed 级别

(1)脏读

clip_image001[5]

(2)更新丢失

clip_image002

(3)不可重复读

clip_image003

(4)幻读

clip_image004

Repeatable Read 级别

(1)脏读

clip_image005

(2)更新丢失

clip_image006

(3)不可重复读

clip_image007

(4)幻读

clip_image008

Serializable 级别

(1)脏读

clip_image009

(2)更新丢失

clip_image010

(3)不可重复读

clip_image011

(4)幻读

clip_image012

我们从上图可以比较直观的看到以下的结论

  脏读 更新丢失 不可重复读 幻读
Read Uncommitted 可能 可能 可能 可能
Read Committed 不可能 可能 可能 可能
Repeatable Read 不可能 不可能 不可能 可能
Serializable 不可能 不可能 不可能 不可能

这一篇到此为止,下一篇详细介绍 Key-Range Lock 并分析开篇提到的死锁问题

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Software ist Microsoft SQL Server? Welche Software ist Microsoft SQL Server? Feb 28, 2023 pm 03:00 PM

Microsoft SQL Server ist ein relationales Datenbankverwaltungssystem, das von Microsoft eingeführt wurde. Es handelt sich um eine umfassende Datenbankplattform, die integrierte Business-Intelligence-Tools (BI) verwendet, um eine Datenverwaltung auf Unternehmensebene zu ermöglichen Grad der Integration mit verwandter Software. Die SQL Server-Datenbank-Engine bietet sicherere und zuverlässigere Speicherfunktionen für relationale Daten und strukturierte Daten und ermöglicht es Benutzern, hochverfügbare und leistungsstarke Datenanwendungen für Unternehmen zu erstellen und zu verwalten.

SQL Server oder MySQL? Neue Forschungsergebnisse zeigen die besten Datenbankoptionen. SQL Server oder MySQL? Neue Forschungsergebnisse zeigen die besten Datenbankoptionen. Sep 08, 2023 pm 04:34 PM

SQLServer oder MySQL? Die neueste Forschung zeigt die beste Datenbankauswahl. Mit der rasanten Entwicklung des Internets und Big Data ist die Datenbankauswahl zu einem wichtigen Thema für Unternehmen und Entwickler geworden. Unter vielen Datenbanken sind SQL Server und MySQL als die beiden am weitesten verbreiteten und am weitesten verbreiteten relationalen Datenbanken äußerst umstritten. Welches sollten Sie also zwischen SQLServer und MySQL wählen? Die neuesten Forschungsergebnisse bringen für uns Licht in dieses Problem. Lassen Sie zunächst

Entwicklung von PHP- und SQL Server-Datenbanken Entwicklung von PHP- und SQL Server-Datenbanken Jun 20, 2023 pm 10:38 PM

Mit der Popularität des Internets ist die Entwicklung von Websites und Anwendungen zum Hauptgeschäft vieler Unternehmen und Einzelpersonen geworden. PHP und SQLServer-Datenbank sind zwei sehr wichtige Tools. PHP ist eine serverseitige Skriptsprache, mit der dynamische Websites entwickelt werden können. SQL Server ist ein von Microsoft entwickeltes relationales Datenbankverwaltungssystem mit vielfältigen Anwendungsszenarien. In diesem Artikel besprechen wir die Entwicklung von PHP und SQL Server sowie deren Vor- und Nachteile sowie Anwendungsmethoden. Lassen Sie uns zunächst einmal

So stellen Sie mithilfe von PDO eine Verbindung zu einer Microsoft SQL Server-Datenbank her So stellen Sie mithilfe von PDO eine Verbindung zu einer Microsoft SQL Server-Datenbank her Jul 29, 2023 pm 01:49 PM

Einführung in die Verwendung von PDO zum Herstellen einer Verbindung zu einer Microsoft SQL Server-Datenbank: PDO (PHPDataObjects) ist eine einheitliche Schnittstelle für den Zugriff auf von PHP bereitgestellte Datenbanken. Es bietet viele Vorteile, wie z. B. die Implementierung einer Abstraktionsschicht der Datenbank und die Erleichterung des Wechsels zwischen verschiedenen Datenbanktypen, ohne große Codemengen ändern zu müssen. In diesem Artikel wird erläutert, wie Sie mit PDO eine Verbindung zu einer Microsoft SQL Server-Datenbank herstellen, und es werden einige zugehörige Codebeispiele bereitgestellt. Schritt

Eine kurze Analyse von fünf Methoden zur Verbindung von SQL Server mit PHP Eine kurze Analyse von fünf Methoden zur Verbindung von SQL Server mit PHP Mar 21, 2023 pm 04:32 PM

In der Webentwicklung ist die Kombination von PHP und MySQL sehr verbreitet. In einigen Fällen müssen wir jedoch eine Verbindung zu anderen Datenbanktypen herstellen, beispielsweise zu SQL Server. In diesem Artikel behandeln wir fünf verschiedene Möglichkeiten, mit PHP eine Verbindung zu SQL Server herzustellen.

SQL Server vs. MySQL: Welche Datenbank eignet sich besser für eine Hochverfügbarkeitsarchitektur? SQL Server vs. MySQL: Welche Datenbank eignet sich besser für eine Hochverfügbarkeitsarchitektur? Sep 10, 2023 pm 01:39 PM

SQL Server vs. MySQL: Welche Datenbank eignet sich besser für eine Hochverfügbarkeitsarchitektur? In der heutigen datengesteuerten Welt ist hohe Verfügbarkeit eine der notwendigen Voraussetzungen für den Aufbau zuverlässiger und stabiler Systeme. Als Kernkomponente der Datenspeicherung und -verwaltung ist die hohe Verfügbarkeit der Datenbank für den Geschäftsbetrieb des Unternehmens von entscheidender Bedeutung. Unter den vielen Datenbanken sind SQLServer und MySQL die gängige Wahl. Welche Datenbank ist im Hinblick auf eine Hochverfügbarkeitsarchitektur besser geeignet? In diesem Artikel werden die beiden verglichen und einige Vorschläge gemacht.

SQL Server und MySQL stehen im Wettbewerb. Wie wählt man die beste Datenbanklösung aus? SQL Server und MySQL stehen im Wettbewerb. Wie wählt man die beste Datenbanklösung aus? Sep 10, 2023 am 08:07 AM

Mit der kontinuierlichen Entwicklung des Internets hat die Datenbankauswahl immer mehr an Bedeutung gewonnen. Unter den vielen Datenbanken sind SQLServer und MySQL zwei hochkarätige Optionen. SQLServer ist ein von Microsoft entwickeltes relationales Datenbankverwaltungssystem, während MySQL ein relationales Open-Source-Datenbankverwaltungssystem ist. Wie wählt man also die beste Datenbanklösung zwischen SQLServer und MySQL aus? Zunächst können wir diese beiden Datenbanken hinsichtlich der Leistung vergleichen. SQLServer verarbeitet

SQL Server vs. MySQL: Was ist besser für die Entwicklung mobiler Apps? SQL Server vs. MySQL: Was ist besser für die Entwicklung mobiler Apps? Sep 09, 2023 pm 01:42 PM

SQLServer vs. MySQL: Was ist besser für die Entwicklung mobiler Apps? Mit der rasanten Entwicklung des Marktes für mobile Anwendungen wird es für Entwickler immer wichtiger, ein Datenbankverwaltungssystem auszuwählen, das für die Entwicklung mobiler Anwendungen geeignet ist. Unter den vielen Möglichkeiten sind SQLServer und MySQL zwei von Entwicklern bevorzugte Datenbanksysteme. Dieser Artikel konzentriert sich auf den Vergleich dieser beiden Datenbanksysteme, um festzustellen, welches für die Entwicklung mobiler Anwendungen besser geeignet ist, und zeigt ihre Unterschiede anhand von Codebeispielen auf. SQLServer ist Microsoft

See all articles