Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции2011.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.86 Mб
Скачать

7. Обновление существующих данных

Обновлять информацию, хранимую в базе данных, требуется тогда, когда соответствующие изменения происходят во "внешнем мире". На примере учебной базы данных это выглядит следующим образом:

  • если клиент изменяет количество заказанного товара, в столбце qty таблицы orders должна быть обновлена соответствующая строка;

  • если руководитель переходит из одного офиса в другой, столбец mgr таблицы offices и столбец REP_QFFICE таблицы salesreps необходимо обновить, чтобы отобразить новое назначение;

  • если личные планы продаж в нью-йоркском офисе увеличиваются на пять процентов, значения столбца quota в соответствующих строках таблицы salesreps должны быть обновлены.

Наименьшей единицей информации, которую можно обновить в реляционной базе данных, является значение одного столбца в одной строке.

Оператор update, синтаксическая диаграмма которого изображена ниже, обновляет значения одного или нескольких столбцов в выбранных строках одной таблицы. В операторе указывается целевая таблица, которая должна быть модифицирована, при этом пользователь должен иметь разрешение на обновление таблицы и каждого конкретного столбца. Предложение where отбирает строки таблицы, подлежащие обновлению. В предложении set указывается, какие столбцы должны быть обновлены, и для них задаются новые значения.

UPDATE <имя таблицы> SET <имя столбца 1>=<выражение 1> [, <имя столбца 2>=<выражение 2>,…] [WHERE <предикат>].

Следующий оператор update изменяет лимит кредита для клиента и закрепляет последнего за новым служащим:

Поднять лимит кредита для компании Acme Manufacturing до $60000 и закрепить ее за Мэри Джонс (Mary Jones) (идентификатор 109).

UPDATE CUSTOMERS SET CREDIT_LIMIT =60000.00, CUST_REP =109 WHERE, COMPANY “Acme Mfg.'

В этом примере в предложении where определена одна строка таблицы customers, а предложение set присваивает новые значения двум столбцам этой строки.

Как и оператор delete, оператор update может одновременно обновить несколько строк, соответствующих условию поиска.

В данном примере предложение where отбирает несколько строк таблицы salesreps и в них обновляются столбцы office и quota. Оператор update выполняется таким образом: все строки таблицы SALESREPS по очереди проверяются на соответствие условию поиска. Строки, для которых условие поиска выполняется (результат проверки имеет значение TRUE), обновляются, а строки, для (результат проверки имеет значение FALSE или NULL), не обновляются.

Предложение SET в операторе update представляет собой список операций присваивания, отделяемых друг от друга запятыми. В каждой операции идентифицируется целевой столбец, который должен обновляться, и определяется новое значение для этого столбца. Каждый целевой столбец должен встречаться в списке только один раз; не должно быть двух операций присваивания для одного и того же целевого столбца.

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

Если выражение в операции присваивания содержит ссылку на один из столбцов целевой таблицы, то для вычисления выражения используется значение этого столбца в текущей строке, которое было перед обновлением. То же самое справедливо для ссылок на столбцы в предложении where. В качестве примера рассмотрим следующий оператор Update:

UPDATE OFFICES SET QUOTA= 4 00000. 00, SALES = QUOTA WHERE QUOTA< 400000.00.

До обновления личный план (quota) Билла Адамса составлял $350000, а объем продаж (sales) — $367911. После обновления объем продаж (sales) в его строке стал равен $350000, а не $400000. Таким образом, порядок операций присваивания в предложении set не играет роли; он может быть любым.