Учебно-практическое пособие москва 2017 ббк


SHOW default_transaction_isolation



Pdf көрінісі
бет195/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   191   192   193   194   195   196   197   198   ...   243
Байланысты:
Язык SQL. Базовый курс

SHOW default_transaction_isolation;
default_transaction_isolation
-------------------------------
read committed
(1 строка)
9.1 Уровень изоляции READ UNCOMMITTED
Давайте начнем рассмотрение с уровня изоляции READ UNCOMMITTED. Проверим,
видит ли транзакция те изменения данных, которые были произведены в другой
транзакции, но еще не были зафиксированы, т. е. «грязные» данные.
Для проведения экспериментов воспользуемся таблицей «Самолеты» (aircrafts). Но
можно создать копию этой таблицы, чтобы при удалении строк из нее не удалялись
строки из таблицы «Места» (seats), связанные со строками из таблицы aircrafts по
внешнему ключу.
CREATE TABLE aircrafts_tmp AS SELECT * FROM aircrafts;
SELECT 9
Для организации выполнения параллельных транзакций с использованием утилиты
psql будем запускать ее на двух терминалах.
Итак, для изучения уровня изоляции READ UNCOMMITTED проделаем следующие
эксперименты.
На первом терминале выполним следующие команды:
BEGIN;
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET
SHOW transaction_isolation;
transaction_isolation
-----------------------
read uncommitted
(1 строка)
UPDATE aircrafts_tmp
SET range = range + 100
WHERE aircraft_code = 'SU9';
202


UPDATE 1
SELECT * FROM aircrafts_tmp WHERE aircraft_code = 'SU9';
aircraft_code |
model
| range
---------------+---------------------+-------
SU9
| Sukhoi SuperJet-100 | 3100
(1 строка)
Начнем транзакцию на втором терминале (все, что происходит на втором терминале,
показано на сером фоне):
BEGIN;
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM aircrafts_tmp WHERE aircraft_code = 'SU9';
aircraft_code |
model
| range
---------------+---------------------+-------
SU9
| Sukhoi SuperJet-100 | 3000
(1 строка)
Таким образом, вторая транзакция не видит изменение значения атрибута range,
произведенное в первой — незафиксированной — транзакции. Это объясняется тем,
что в PostgreSQL реализация уровня изоляции READ UNCOMMITTED более строгая,
чем того требует стандарт языка SQL. Фактически этот уровень тождественен уров-
ню изоляции READ COMMITTED. Поэтому будем считать эксперимент, проведен-
ный для уровня изоляции READ UNCOMMITTED, выполненным и для уровня READ
COMMITTED.
Давайте не будем фиксировать произведенное изменение в базе данных, а восполь-
зуемся командой ROLLBACK для отмены транзакции, т. е. для ее отката.
На первом терминале:


Достарыңызбен бөлісу:
1   ...   191   192   193   194   195   196   197   198   ...   243




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

    Басты бет