UPDATE aircrafts_tmp SET range = range + 200
WHERE aircraft_code = 'CR2';
При выполнении двух и более подобных обновлений в рамках параллельных
транзакций, использующих, например, уровень изоляции READ COMMITTED,
будут учтены все такие изменения (что и было показано в тексте главы). Оче-
видно, что потерянного обновления не происходит.
Предположим, что в одной транзакции будет просто присваиваться новое зна-
чение, например, так:
UPDATE aircrafts_tmp SET range = 2100 WHERE aircraft_code = 'CR2';
А в параллельной транзакции будет выполняться аналогичная команда, напри-
мер:
UPDATE aircrafts_tmp SET range = 2500 WHERE aircraft_code = 'CR2';
Очевидно, что сохранится только одно из значений атрибута range. Можно ли
говорить, что в такой ситуации имеет место потерянное обновление? Если оно
имеет место, то что можно предпринять для его недопущения? Обоснуйте ваш
ответ.
Для получения дополнительной информации можно обратиться к фундамен-
тальному труду К. Дж. Дейта, а также к полному руководству по SQL Дж. Гроффа,
П. Вайнберга и Э. Оппеля. Библиографические описания этих книг приведены в
списке рекомендуемой литературы.
4. На уровне изоляции транзакций READ COMMITTED имеет место такой фено-
мен, как чтение фантомных строк. Такие строки могут появляться в выборке как
в результате добавления новых строк параллельной транзакцией, так и вслед-
ствие изменения ею значений атрибутов, участвующих в формировании усло-
вия выборки. Рассмотрим пример, иллюстрирующий вторую из указанных при-
чин.
На первом терминале организуем транзакцию с уровнем изоляции READ
COMMITTED:
Достарыңызбен бөлісу: