READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SNAPSHOT
SERIALIZABLE
READ COMMITTED
В режиме READ COMMITTED инструкции sql запроса будут читать только те данные, которые были зафиксированы предыдущими/параллельными транзакциями. Если же на читаемы данные была наложена блокировка, то текущий пакет инструкций будет ожидать высвобождения ресурса. Например, есть два пакета инструкций, запущенных одновременно, рассмотрим пример, в Microsoft SQL Manegment Studio откроем 2 окна запроса, в первом запустите следующий код
SET TRANSACTION ISOLATION LEVEL READ COMMITTEDво втором запускаем аналогичный код
GO
BEGIN TRANSACTION
SELECT * FROM t1
UPDATE t1
SET textdata = 'Thread_1'
WHERE row = 1
-- !!!Важно!!! - не фиксируем транзакцию
GO
SET TRANSACTION ISOLATION LEVEL READ COMMITTEDВ результате, если запустить 1-й код а следом запустить 2-й, мы получим во 2-м коде ожидание завершения транзакции в первом окне.
GO
BEGIN TRANSACTION
SELECT * FROM t1
UPDATE t1
SET textdata = 'Thread_2'
WHERE row = 1
SELECT * FROM t1
COMMIT TRANSACTION
GO
Добавьте в первое окно следующую строку:
COMMIT TRANSACTION
И исполните только ее. Переключившись во 2-е окно мы увидим результат выполнения 2-го пакета , две выборки до изменения и после внесения изменений в таблицу t1.
Принцип работы этих пакетов можно отобразить на временной оси.
момент времени | 1 | 2 | 3 | 4 | 5 | 6 |
запрос 1 | начало транзакции | внесение изменений | фиксация изменений | |||
запрос 1 | начало транзакции | ожидание запроса 1 | внесение изменений | фиксация транзакции |
Комментариев нет:
Отправить комментарий