Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
nwpi233.pdf
Скачиваний:
90
Добавлен:
13.08.2013
Размер:
1.75 Mб
Скачать

WHERE Период = "Апрель";

Удалить все работы (рис. 2.8) для сотрудника, проживающего в Гатчине.

DELETE

FROM Работы

WHERE Ид_Сотр IN

(SELECT Ид_Сотр

FROM Сотрудник

WHERE Город = "Гатчина");

Например, если мы закрыли нашу точку в Мурманске, следующий запрос удалит всех совместителей из Мурманска:

DELETE

FROM Совместители

WHERE Город = "Мурманск" and Ид_Совм = ANY

(SELECT Ид_Совм

FROM Сотрудник

WHERE Сотрудник.Ид_Совм= Совместители.Ид_Сотр );

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

6.4.Инструкция UPDATE

6.4.1.Модификация одной записи

Для модификации значений в одной записи необходимо в инструкции UPDATE указать имя используемой таблицы и в опции предложения SET указать на изменение, которое нужно сделать для определенного столбца. Фраза WHERE должна содержать квалифицирующее выражение, позволяющее выделить только одну строку таблицы.

Например, чтобы изменить у сотрудника район и индекс почты в таблице СОТРУДНИК (рис. 2.1), Вы можете ввести:

UPDATE Сотрудник

SET Район = "Фрун", Индекс = "94555"

WHERE

Ид_Сотр = 1;

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

-как определить, что новый адрес соответствует действительности;

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

Подобные задачи должны решаться уже встроенными средствами СУБД, а точнее, наличием возможностей в концептуальной модели системы отслеживать подобные ситуации.

6.4.2. Модификация нескольких строк

Если фраза WHERE в инструкции UPDATE содержит квалифицирующее выражение, в результате исполнения которого будет получено несколько строк, то действие опции SET распространяется на все эти строки.

Увеличить оклад сотрудников (рис. 2.3) на 1000 рублей, но только для тех, кто был принят на работу до 2003 года.

UPDATE Отдел_ Сотрудники

SET Оклад = Оклад +1000

WHERE Дата_ приема < 2003 and Дата_ увольнения=NULL;

Установить расценки на 0.3 больше предыдущей, только для штатных преподавателей начиная с мая месяца.

UPDATE Работы

SET Цена = Цена+0.3

WHERE Работы.Период_с > 30.04.03 AND Ид_Сотр IN

(SELECT Ид_Сотр

FROM Сотрудник, Отдел_ Сотрудники

WHERE Сотрудник. Ид_Сотр = Отдел_ Сотрудник. Ид_Сотр AND Отдел_ Сотрудники. Ид_Сотр <> NULL);

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

Пусть необходимо изменить идентификатор (номер) Ид_Вида в таблице ВИД_РАБОТЫ (рис. 2.9) например 10 на 16. Атрибут с именем Ид_Вида встречается также в таблице РАБОТЫ (рис. 2.8). Поэтому изменение, производимое в таблице ВИД_РАБОТЫ, должно быть отражено в таблице РАБОТЫ.

UPDATE Вид_ работы

SET Ид_Вида = 16

WHERE Ид_Bида = 10;

UPDATE Работы

SET Ид_Вида = 16

WHERE Ид_Вида = 10;

В интервале времени между первым и вторым оператором UPDATE база данных будет находиться в противоречивом состоянии (нарушается целостность по ссылкам), поскольку после выполнения первой транзакции таблица РАБОТЫ (рис. 2.8) ссылается

Соседние файлы в предмете Информационные технологии