Quelle est (sont) la différence entre NOLOCK et non VALIDÉES
J'utilise SQL Server 2012.
J'écris deux requêtes, mais ce qui est différent entre NOLOCK
et UnCommitted
?
SELECT lastname, firstname
FROM HR.Employees with (READUNCOMMITTED)
SELECT lastname, firstname
FROM HR.Employees with (NoLock)
- La documentation pour
NOLOCK
états:NOLOCK: Is equivalent to READUNCOMMITTED
. Je suppose que cela devrait répondre à votre question. La section pertinente dans la documentation en Ligne estTable Hints
si vous avez envie de lire sur elle. - merci de me donner un lien
- msdn.microsoft.com/en-us/library/ms187373%28v=sql.110%29.aspx Vous pouvez trouver les informations dans la documentation qui est accessible via le
F1
. - merci pour la F1
Vous devez vous connecter pour publier un commentaire.
NOLOCK : Est équivalent à
READUNCOMMITTED
(source : MSDN)NOLOCK
ouREADUNCOMMITTED
Indique que les lectures sont autorisés. Pas de verrous partagés sont émis pour empêcher d'autres opérations de modifier les données lues par la transaction en cours, et les verrous exclusifs créés par d'autres transactions ne pas bloquer la transaction en cours de lecture les données verrouillées. Permettant des lectures incorrectes peut accroître la concurrence, mais au prix de la lecture, les modifications de données qui sont ensuite annulées par d'autres transactionsREADUNCOMMITTED
etNOLOCK
conseils s'appliquent uniquement aux verrous de données. Toutes les requêtes, y compris ceuxwith READUNCOMMITTED and NOLOCK hints
, acquérir Sch-S (stabilité du schéma) verrouille lors de la compilation et de l'exécution. De ce fait, les requêtes sont bloqués lorsqu'une transaction simultanée détient un Sch-M (modification du schéma) de verrouillage sur la tableSous le capot, ils sont la réalisation de la même action.
La
read-uncommitted
niveau d'isolation est le moins restrictif niveau d'isolement au sein de SQL Server, qui est aussi ce qui le rend populaire pour les développeurs lors de la recherche pour réduire le blocage.La
nolock
indicateur de table en coulisses effectue exactement de la même action que l'exécution dans le cadre du lire-niveau d'isolation non validées.La seule différence entre les deux est que la
read-uncommitted
niveau d'isolement détermine le mécanisme de verrouillage pour l'ensemble de la connexion et de lanolock
tableau indicateur détermine le mécanisme de verrouillage de la table que vous donner l'astuce pour.Pas de différence en termes de leurs fonctions, comme d'autres l'ont mentionné.
La seule différence est que vous pouvez appliquer
WITH(NOLOCK)
de manière sélective, sur certains tableaux, mais pas d'autres.READ UNCOMMITTED
s'appliqueNOLOCK
à toutes les tables dans une session.Si vous faites cela:
Il est fonctionnellement équivalent à:
Mais vous pouvez également appliquer
WITH(NOLOCK)
sélective:Il n'y a pas de différence au niveau de l'instruction.
Vous pouvez définir READUNCOMMITED au niveau de la session et ici, vous devez écrire
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
Pour NOLOCK , nous avons besoin de mettre cette indication sur le niveau de la table, de sorte qu'il est nécessaire de mettre pour toutes les tables qui sont utilisées dans la transaction de mise à jour. Il est donc très longue et fastidieuse à mettre partout tables se réfère à la requête. Pour READ UNCOMMITTED, Nous n'avons pas besoin de mettre tous les tables de niveau, il suffit de mettre à niveau de la session ou de la requête de niveau, et peut être écrit en haut de la requête ou une procédure stockée.
Penchons-nous sur petite démo à élaborer. D'abord ici de vérification de base de données niveau d'isolation par défaut
De sortie est de 1, Col1 pour la requête