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


BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE



Pdf көрінісі
бет208/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   204   205   206   207   208   209   210   211   ...   256
sql osnovi yazika

BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN
В команде обновления строки будем использовать предложение RETURNING. По-
скольку значение поля num не изменяется, то будет видно, какая строка была обнов-
лена. Это особенно пригодится во второй транзакции.
UPDATE modes
SET mode = 'HIGH'
WHERE mode = 'LOW'
RETURNING *;
num | mode
-----+------
1 | HIGH
(1 строка)
UPDATE 1
На втором терминале тоже начнем транзакцию и обновим другую строку из тех двух
строк, которые были показаны выше.
270


9.5. Уровень изоляции Serializable
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN
UPDATE modes
SET mode = 'LOW'
WHERE mode = 'HIGH'
RETURNING *;
num | mode
-----+------
2 | LOW
(1 строка)
UPDATE 1
Изменение, произведенное в первой транзакции, вторая транзакция не видит, по-
скольку на уровне изоляции Serializable каждая транзакция работает с тем снимком
базы данных, который был сделан непосредственно перед выполнением ее перво-
го оператора. Поэтому обновляется только одна строка, та, в которой значение поля
mode было равно HIGH изначально.
Обратите внимание, что обе команды UPDATE были выполнены, ни одна из них не
ожидает завершения другой транзакции.
Посмотрим, что получилось в первой транзакции:
SELECT * FROM modes;
num | mode
-----+------
2 | HIGH
1 | HIGH
(2 строки)
А во второй транзакции:
SELECT * FROM modes;
num | mode
-----+------
1 | LOW
2 | LOW
(2 строки)
271


Глава 9. Транзакции
Заканчиваем эксперимент. Сначала завершим транзакцию на первом терминале:


Достарыңызбен бөлісу:
1   ...   204   205   206   207   208   209   210   211   ...   256




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

    Басты бет