678__________________Часть V. Разработка программ и написание скриптов

место уже занято. Агент информирует об этом клиента, и они продолжают поиск другого места.

5. Вы приезжаете в аэропорт и садитесь в самолет.

Механизм транзакций также полезен для восстановления систем. Поскольку запись ведется на жесткий диск, часто через сеть, что требует некоторого времени, многие базы данных реализованы таким образом, что обновляют данные, временно сохраняя их в локальном буфере. Если система выходит из строя до того, как система RDBMS смогла в действительности обновить базу данных, то некоторые из этих изменений могут быть утеряны. Решение этой проблемы, реализованное в большинстве коммерческих баз данных, заключается в следующем. Запись каждого изменения, производимого в базе данных, осуществляется в специальном месте на диске, называемо журналом регистрации транзакций(transaction log). Если система вышла из строя до того, как изменения были внесены в базу данных, то сведения, содержащиеся в журнале регистрации транзакций, могут быть использованы при восстановлении системы для завершения процесса обновления данных. ^

Курсоры

Web-мастера, имеющие опыт работы главным образом с базами данных PC-совместимых компьютеров, привыкли выполнять запросы для получения отдельных записей. Так, например, система dBASE III использует концепцию "указателя". Программист мог записать следующее:

GOTO 3 DISPLAY

По такому запросу возвращались все поля записи с номером три. Программист мог также ввести следующий запрос:

DISPLAY NEXT I

Профамма перемещала указатель вперед и отображала запись с номером четыре. Многие SQL-программисты считают, что такое обращение к отдельным записям достаточно неудобно. В языке запросов SQL одной из наиболее удачных форм запроса является следующая:

SELECT * WHERE publicationYear= 1996

При таком запросе может быть возвращена одна запись, несколько записей, а может быть и ни одной. Даже если программист знает, что будет найдена ровно одна запись, как, например, при следующем запросе:

SELECT * WHERE ISBN= '0789708019'

структура языка запросов такова, что программа все равно будет считать, что возвратится целый набор записей.

Многие коммерческие реализации SQL поддерживают концепци курсор (cursor). Понятие курсора очень близко понятию указателя, используемого в