Учебное пособие Санкт-Петербург «бхв-петербург»


BEGIN ISOLATION LEVEL READ COMMITTED



Pdf көрінісі
бет202/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   198   199   200   201   202   203   204   205   ...   256
sql osnovi yazika

BEGIN ISOLATION LEVEL READ COMMITTED;
BEGIN
SHOW transaction_isolation;
transaction_isolation
-----------------------
read committed
(1 строка)
261


Глава 9. Транзакции
UPDATE aircrafts_tmp
SET range = range + 100
WHERE aircraft_code = 'SU9';
UPDATE 1
SELECT *
FROM aircrafts_tmp
WHERE aircraft_code = 'SU9';
aircraft_code |
model
| range
---------------+---------------------+-------
SU9
| Sukhoi SuperJet-100 | 3100
(1 строка)
Мы видим, что в первой транзакции значение атрибута range было успешно изме-
нено, хотя пока и не зафиксировано. Но транзакция видит изменения, выполненные
в ней самой.
Обратите внимание, что вместо использования команды SET TRANSACTION мы про-
сто включили указание уровня изоляции непосредственно в команду BEGIN. Эти два
подхода равносильны. Конечно, когда речь идет об использовании уровня изоляции
Read Committed, принимаемого по умолчанию, можно вообще ограничиться только
командой BEGIN без дополнительных ключевых слов.
На втором терминале так и сделаем. Во второй транзакции попытаемся обновить эту
же строку таблицы airctafts_tmp, но для того, чтобы впоследствии разобраться,
какое из изменений прошло успешно и было зафиксировано, добавим к значению
атрибута range не 100, а 200.
BEGIN;
BEGIN
UPDATE aircrafts_tmp
SET range = range + 200
WHERE aircraft_code = 'SU9';
И вот мы видим, что команда UPDATE во второй транзакции не завершилась, а пере-
шла в состояние ожидания. Это ожидание продлится до тех пор, пока не завершится
первая транзакция. Дело в том, что команда UPDATE в первой транзакции заблоки-
ровала строку в таблице airctafts_tmp, и эта блокировка будет снята только при
завершении транзакции либо с фиксацией изменений с помощью команды COMMIT,
либо с отменой изменений по команде ROLLBACK.
262


9.3. Уровень изоляции Read Committed
Давайте завершим первую транзакцию с фиксацией изменений:
COMMIT;
COMMIT
Перейдя на второй терминал, мы увидим, что команда UPDATE завершилась:
UPDATE 1
Теперь на втором терминале, не завершая транзакцию, посмотрим, что стало с нашей
строкой в таблице aircrafts_tmp:


Достарыңызбен бөлісу:
1   ...   198   199   200   201   202   203   204   205   ...   256




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет