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


Контрольные вопросы и задания



Pdf көрінісі
бет208/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   204   205   206   207   208   209   210   211   ...   243
Байланысты:
Язык SQL. Базовый курс

Контрольные вопросы и задания
1. По умолчанию каждая SQL-команда, выполняемая в среде psql, образует отдель-
ную транзакцию с уровнем изоляции READ COMMITTED. Поэтому в тех экс-
периментах, когда одна из транзакций состоит только из единственной SQL-
команды, можно не выполнять команды BEGIN и END. Конечно, если каждая из
параллельных транзакций состоит из единственной SQL-команды, то хотя бы
для одной из транзакций придется все же выполнить и команду BEGIN, иначе
эксперимент не получится.
В тексте главы были приведены примеры транзакций, в которых рассматрива-
лись команды SELECT ... FOR UPDATE и LOCK TABLE. Попробуйте повторить эти
эксперименты с учетом описанного поведения PostgreSQL.
2. Транзакции, работающие на уровне изоляции READ COMMITTED, видят только
свои собственные обновления и обновления,
зафиксированные
параллельными
транзакциями. При этом нужно учитывать, что иногда могут возникать ситуа-
ции, которые на первый взгляд кажутся парадоксальными, но на самом деле все
происходит в строгом соответствии с этим принципом.
Давайте воспользуемся таблицей «Самолеты» (aircrafts) или ее копией. Пред-
положим, что мы решили удалить из таблицы те модели, дальность полета ко-
торых менее 2000 км. В таблице представлена одна такая модель — Cessna 208
Caravan, имеющая дальность полета 1200 км. Для выполнения удаления мы ор-
ганизовали транзакцию. Однако параллельная транзакция, которая, причем,
началась раньше, успела обновить таблицу таким образом, что дальность по-
лета самолета Cessna 208 Caravan стала составлять 2100 км, а вот для самолета
Bombardier CRJ-200 она, напротив, уменьшилась до 1900 км. Таким образом, в
результате выполнения операций обновления в таблице по-прежнему присут-
ствует строка, удовлетворяющая первоначальному условию, т. е. значение ат-
рибута range у которой меньше 2000.
218


Наша задача: проверить, будет ли в результате выполнения двух транзакций
удалена какая-либо строка из таблицы.
На первом терминале начнем транзакцию, при этом уровень изоляции READ
COMMITTED в команде указывать не будем, т. к. он принят по умолчанию:


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




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

    Басты бет