He intentado reproducir la situación de la pregunta [1].Comprender el comportamiento de bloqueo en SQL Server
En la tabla, tomada y lleno de datos de la wiki "(sistemas de bases de datos) de aislamiento" [2],
en SQL Server 2008 R2 SSMS, ejecuté:
1) por primera vez en la primera pestaña (ventana) de SSMS
-- transaction isolation level in first window does not influence results (?)
-- initially I thought that second transaction in 2) runs at the level set in first window
begin transaction
INSERT INTO users VALUES (3, 'Bob', 27)
waitfor delay '00:00:22'
rollback
2) inmediatamente después, en segunda ventana
-- this is what I commented/uncommented
-- set transaction isolation level SERIALIZABLE
-- set transaction isolation level READ REPEATABLE
-- set transaction isolation level READ COMMITTED
-- set transaction isolation level READ UNCOMMITTED
SELECT * FROM users --WITH(NOLOCK)
Actualización:
Lo sentimos, los resultados fueron corregidos.
Mis resultados, dependiendo del nivel de aislamiento establecido en 2), son que SELECT devuelve:
inmediatamente (lectura fila insertada no comprometidos)
- para todos los casos de SELECT con NOLOCK
- para READ UNCOMMITTED (SELECCIONAR con o sin NOLOCK)
está a la espera de la finalización de la transacción 1) (SOLAMENTE SI SELECT es sin NOLOCK) y
- en LEER comprometido y superior (repetible READ, SERIALIZABLE) transacción nivel de aislamiento
Estos los resultados contradicen la situación descrita en la pregunta (¿y se explica en las respuestas?) [1]
(por ejemplo, que SELECCIONAR con NOCHECK está esperando la finalización de 1)), etc.
¿Cómo se pueden explicar mis resultados y [1]?
Update2:
Esta pregunta es realmente de preguntas adicionales de mis preguntas [3] (o el resultado de ellos no se responde).
citados:
[1]
explicar el comportamiento de bloqueo en SQL Server
Explain locking behavior in SQL Server
[2]
"aislamiento (sistemas de base de datos)"
Plz Añadir barra) para vincular. ¡No logro conservarlo aquí en el enlace! http://en.wikipedia.org/wiki/Isolation_(database_systems)
[3]
¿NOLOCK es el valor predeterminado para las sentencias SELECT en SQL Server 2005?
Is NOLOCK the default for SELECT statements in SQL Server 2005?
El nivel de aislamiento para la transacción de inserción no afectará en absoluto a lo que ve la segunda transacción. ¿Estás seguro de que tu segunda transacción no se estaba ejecutando con el nivel "LEER SIN COMPROMISO"? –