tablock sirve rowlock que para sql sql-server sql-server-2012 locking isolation-level

sirve - rowlock sql server



¿Cuál es(son) la diferencia entre NOLOCK y UNCOMMITTED (5)

No hay diferencia en el nivel de declaración.

Puede configurar READUNCOMMITED en el nivel de la sesión y aquí debe escribir SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

Yo uso SQL Server 2012.

Escribo dos consultas, pero ¿qué es diferente entre NOLOCK y UnCommitted ?

SELECT lastname, firstname FROM HR.Employees with (READUNCOMMITTED) SELECT lastname, firstname FROM HR.Employees with (NoLock)


No hay diferencia en términos de sus funciones, como otros han mencionado.

La única diferencia es que puede aplicar WITH(NOLOCK) selectivamente, en algunas tablas pero no en otras. READ UNCOMMITTED aplica NOLOCK a todas las tablas en una sesión.

Si haces esto:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT * FROM Table1 T1 INNER JOIN Table2 T2 ON T1.ID = T2.id

Es funcionalmente equivalente a:

SELECT * FROM Table1 T1 WITH(NOLOCK) INNER JOIN Table2 T2 WITH(NOLOCK) ON T1.ID = T2.ID

Pero también puede aplicar WITH(NOLOCK) selectivamente:

SELECT * FROM Table1 T1 WITH(TABLOCK) INNER JOIN Table2 WITH(NOLOCK) ON T1.ID = T2.ID


NOLOCK: Es equivalente a READUNCOMMITTED (fuente: MSDN )

NOLOCK o READUNCOMMITTED Especifica que las lecturas sucias están permitidas. No se emiten bloqueos compartidos para evitar que otras transacciones modifiquen los datos leídos por la transacción actual y los bloqueos exclusivos establecidos por otras transacciones no bloquean la lectura actual de los datos bloqueados. Permitir lecturas sucias puede causar una mayor concurrencia, pero a costa de leer modificaciones de datos que luego son revertidas por otras transacciones

READUNCOMMITTED NOLOCK READUNCOMMITTED y NOLOCK aplican solo a los bloqueos de datos. Todas las consultas, incluidas aquellas with READUNCOMMITTED and NOLOCK hints , adquieren bloqueos Sch-S (estabilidad del esquema) durante la compilación y la ejecución. Debido a esto, las consultas se bloquean cuando una transacción simultánea contiene un bloqueo Sch-M (modificación de esquema) en la tabla


Para NOLOCK, debemos poner esta sugerencia al nivel de la tabla, por lo que es necesario poner para cada nivel de tabla que se usa en la transacción de actualización. Por lo tanto, es muy largo y lento ponerlo en todas partes, las tablas se refieren en la consulta. Para READ UNCOMMITTED, no tenemos que ponerlo en cada nivel de tabla, simplemente ponerlo en el nivel de la sesión o de la consulta y se puede escribir en la parte superior de la consulta o del procedimiento almacenado. Veamos un pequeño demo para elaborarlo. Primero, verificar aquí el nivel de aislamiento predeterminado de la base de datos

CREATE TABLE SAMPLETABLE ( Col1 INT , Col2 VARCHAR(100) ) INSERT INTO SAMPLETABLE(Col1,Col2) SELECT 1,''Col1'' Union all SELECT 2,''Col1'' BEGIN TRANSACTION Update SAMPLETABLE Set Col2 = ''Value changed'' Where col1 =1 Select * from SAMPLETABLE with (nolock) SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED Select * from SAMPLETABLE

La salida es 1, Col1 para ambas consultas


Debajo del capó están realizando la misma acción.

El nivel de aislamiento de read-uncommitted es el nivel de aislamiento menos restrictivo dentro de SQL Server, que también es lo que lo hace popular para los desarrolladores cuando se busca reducir el bloqueo.

La nolock tabla nolock entre bastidores realiza exactamente la misma acción que ejecutar bajo el nivel de aislamiento sin lectura.

La única diferencia entre los dos es que el nivel de aislamiento de read-uncommitted determina el mecanismo de bloqueo para toda la conexión y la nolock tabla nolock determina el mecanismo de bloqueo para la tabla a la que le da la pista.