Maison base de données tutoriel mysql SQL Server 事务和锁详解

SQL Server 事务和锁详解

Jun 07, 2016 pm 05:48 PM
sql server

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

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

Copier après la connexion
 代码如下 复制代码
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
Copier après la connexion
在搞清楚这个问题的过程中做了不少的实验,与各位共享。这一篇是开篇,主要说明的是 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 并分析开篇提到的死锁问题

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quel logiciel est Microsoft SQL Server ? Quel logiciel est Microsoft SQL Server ? Feb 28, 2023 pm 03:00 PM

Microsoft SQL Server est un système de gestion de base de données relationnelle lancé par Microsoft. Il s'agit d'une plate-forme de base de données complète qui utilise des outils de business intelligence (BI) intégrés pour fournir une gestion des données au niveau de l'entreprise. Elle est facile à utiliser, a une bonne évolutivité et a un niveau élevé. degré d'intégration avec les logiciels associés. Avantages élevés. Le moteur de base de données SQL Server fournit des fonctions de stockage plus sécurisées et plus fiables pour les données relationnelles et les données structurées, permettant aux utilisateurs de créer et de gérer des applications de données hautement disponibles et performantes pour les entreprises.

SQL Server ou MySQL ? Une nouvelle recherche révèle les meilleurs choix de bases de données. SQL Server ou MySQL ? Une nouvelle recherche révèle les meilleurs choix de bases de données. Sep 08, 2023 pm 04:34 PM

SQLServer ou MySQL ? Les dernières recherches révèlent la meilleure sélection de bases de données. Ces dernières années, avec le développement rapide d'Internet et du Big Data, la sélection de bases de données est devenue un problème important auquel sont confrontés les entreprises et les développeurs. Parmi les nombreuses bases de données, SQL Server et MySQL, qui sont les deux bases de données relationnelles les plus courantes et les plus utilisées, sont très controversées. Alors, entre SQLServer et MySQL, lequel choisir ? Les dernières recherches nous éclairent sur ce problème. Tout d'abord, laissez

Développement de bases de données PHP et SQL Server Développement de bases de données PHP et SQL Server Jun 20, 2023 pm 10:38 PM

Avec la popularité d’Internet, le développement de sites Web et d’applications est devenu l’activité principale de nombreuses entreprises et particuliers. Les bases de données PHP et SQLServer sont deux outils très importants. PHP est un langage de script côté serveur qui peut être utilisé pour développer des sites Web dynamiques ; SQLServer est un système de gestion de bases de données relationnelles développé par Microsoft et propose un large éventail de scénarios d'application. Dans cet article, nous aborderons le développement de PHP et SQL Server, ainsi que leurs avantages, inconvénients et méthodes d'application. Tout d'abord, commençons

Comment se connecter à une base de données Microsoft SQL Server à l'aide de PDO Comment se connecter à une base de données Microsoft SQL Server à l'aide de PDO Jul 29, 2023 pm 01:49 PM

Introduction à l'utilisation de PDO pour se connecter à une base de données Microsoft SQL Server : PDO (PHPDataObjects) est une interface unifiée pour accéder aux bases de données fournies par PHP. Il offre de nombreux avantages, tels que la mise en œuvre d'une couche d'abstraction de la base de données et la possibilité de basculer facilement entre différents types de bases de données sans modifier une grande quantité de code. Cet article explique comment utiliser PDO pour se connecter à une base de données Microsoft SQL Server et fournit quelques exemples de code associés. étape

Une brève analyse de cinq méthodes de connexion de SQL Server à PHP Une brève analyse de cinq méthodes de connexion de SQL Server à PHP Mar 21, 2023 pm 04:32 PM

Dans le développement Web, la combinaison de PHP et MySQL est très courante. Cependant, dans certains cas, nous devons nous connecter à d’autres types de bases de données, comme SQL Server. Dans cet article, nous aborderons cinq manières différentes de se connecter à SQL Server à l'aide de PHP.

SQL Server vs MySQL : quelle base de données est la plus adaptée à une architecture haute disponibilité ? SQL Server vs MySQL : quelle base de données est la plus adaptée à une architecture haute disponibilité ? Sep 10, 2023 pm 01:39 PM

SQL Server vs MySQL : quelle base de données est la plus adaptée à une architecture haute disponibilité ? Dans le monde actuel axé sur les données, la haute disponibilité est l'une des nécessités pour créer des systèmes fiables et stables. En tant que composant essentiel du stockage et de la gestion des données, la haute disponibilité de la base de données est cruciale pour le fonctionnement commercial de l'entreprise. Parmi les nombreuses bases de données, SQLServer et MySQL sont des choix courants. Alors en termes d’architecture haute disponibilité, quelle base de données est la plus adaptée ? Cet article comparera les deux et donnera quelques suggestions.

SQL Server et MySQL rivalisent, comment choisir la meilleure solution de base de données ? SQL Server et MySQL rivalisent, comment choisir la meilleure solution de base de données ? Sep 10, 2023 am 08:07 AM

Avec le développement continu d’Internet, la sélection des bases de données est devenue de plus en plus importante. Parmi les nombreuses bases de données, SQLServer et MySQL sont deux options de premier plan. SQLServer est un système de gestion de bases de données relationnelles développé par Microsoft, tandis que MySQL est un système de gestion de bases de données relationnelles open source. Alors comment choisir la meilleure solution de base de données entre SQLServer et MySQL ? Tout d’abord, nous pouvons comparer ces deux bases de données en termes de performances. SQLServer est en train de traiter

SQL Server vs MySQL : quel est le meilleur pour le développement d'applications mobiles ? SQL Server vs MySQL : quel est le meilleur pour le développement d'applications mobiles ? Sep 09, 2023 pm 01:42 PM

SQLServer vs MySQL : quel est le meilleur pour le développement d'applications mobiles ? Avec le développement rapide du marché des applications mobiles, il est devenu de plus en plus critique pour les développeurs de choisir un système de gestion de bases de données adapté au développement d'applications mobiles. Parmi les nombreux choix, SQLServer et MySQL sont deux systèmes de bases de données privilégiés par les développeurs. Cet article se concentrera sur la comparaison de ces deux systèmes de bases de données afin de déterminer lequel est le meilleur pour le développement d'applications mobiles et démontrera leurs différences à travers des exemples de code. SQLServer est Microsoft

See all articles