• Or изменения базы данных можно отказаться уже после проявления результата этих изменений, как в предыдущем примере: ошибочные действия были отме нены после того, как Diaпe получила свои выходные данные.
•Одно действие может воздействовать на частичный результат другого действия. Например: среднее значение комиссионных для Diane было установлено в то время, когда выполнялось обновление. Функции, подобные агрегатным, долж ны отражать состояние базы данных в точке относительной стабильности. На
при мер, некто, проверяющий журналы регистраций, должен иметь
возможность вернуться назад и определить, что средние значения для Diane су ществовали в какой-то момент времени и что они должны были оставаться не
изменными, если после этого момента времени не вносилось никаких
изменений. Этого не происходит, если обновление выполняется во время вы числения значения функции.
•Тупик. Два пользователя могут пытаться выполнить действия, которые оказы
вают взаимное влияние. Например, два пользователя одновременно пытаются
изменить значения как внешнего, так и соответствующего ему родительского
ключей.
Возникало бы множество непредсказуемых ситуаций, если бы одновре,менно вы полняющиеся транзакции были бы неконтролируемыми. Но SQL обеспечивает управ ление параллелuзJuо.111 (со11си1тепсу controls). Смысл его в том, что каждая из одновременно выполняющихся команд выполняются так, как если бы она выполня лась совершенно одна от самого начала до момента получения результата (включая, по мере необходимости, команды COMMIT и ROLLBACK).
Точнейшая интерпретация этой ситуации - не разрешать воздействия на таблицу
более чем одной транзакции в один момент времени. Базу данных необходимо держать постоянно в состоянии доступности для множества пользователей, а это требует некото рого компромисса с управлением параллелизмом. Большинство SQL-систем предос тавляет пользователям варианты, позволяющие балансировать между параллелизмом в использовании данных и доступностью базы данных. Управление такими возможно стями осуществляется пользователем, DBA (администратором базы данных) либо и
тем, и другим. Иногда они выполняют управление независимо от самого SQL, даже
несмотря на использование операции SQL.
Механизмы SQL, которые разработчики применяют для управления совпадаю щими операциями, называются за.11ка.11и (блокировка.11и) (locks). Замки ограничива ют определенные операции на базе данных, когда другие операции или транзакции являются активными. Операции, на которые накладываются ограничения, вы страиваются в очередь и выполняются, когда блокировка снимается (некоторые разработки позволяют задать NOWAIT, при этом команда не ставится в очередь, а отвергается, давая возможность выполнить какие-либо действия вместо ожидания в очереди).
Блокировки в многопользовательских системах весьма существенны. Следователь но, есть своего рода схема блокировки по умолчанию, которая применяется ко всем ко мандам базы данных. Эта схема может быть определена для всей базы данных, либо