![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Команды обновления применительно к представлениям работают следующим образом: воздействуют на базовую таблицу представления. Существуют критерии для определения обновленовляемого представления представления:
1)Оно базируется только на одной таблице.
2)Должно включать первичный ключ таблицы.
3)Не должно содержать ключей, полученных агрегированием.
4)Не должно содержать DISTINCT в своем определении.
5)Не должно содержать GROUP BY и HAVING в своем определении.
6)Не должно содержать подзапросов.
7)Может быть ограничено на обновляемом представлении.
8)Не может содержать констант, строк или выражений в списке выбираемых выходных полей.
9)Для команды INSERT должно включать любые поля, которые имеют ограничения NOT NULL.
Представления, которые не отвечают выше указанным критериям, являются представлениями только для чтения. Однако, даже с обновляемыми представлениями часто бывают проблемы. Например:
CREATE VIEW Highrating
AS SELECT cnum, rating FROM Customers
WHERE rating = 300;
Выполняется следующая команда:
INSERT INTO Highrating
VALUES (2000, 200);
Обновление выполнено не будет. Эта проблема в SQL решается следующим образом: в определение представления добавляется команда:
WITH CHECK OPTION
Эта команда вводится в определения представления и она не имеет отношения к базовой таблице. Будут контролироваться все команды. При выполнении команды будут выдаваться сообщения. Аналогичная проблема возникает, если необходимо в представление включить строки, которые базируются на полях, которые не представлены в представлении:
CREATE VIEW Londonstaff
AS SELECT cnum, cname, comm
FROM Salespeople
WHERE city =’London’;
Если в такое представление попытаться вставить строчку, то она не будет видна в представлении, а будет вставлена в базовую таблицу. Чтобы решить эту проблему, необходимо всегда в представлении задавать все поля, которые есть в базовой таблице.
Получится представление, в котором будут одинаковые значения для поля city. Чтобы исключить это из выходных данных нужно:
SELECT snum, sname
FROM Londonstaff;
Опция WITH CHECK OPTION действует только на представление, в котором она указана, но не действует на представление, которое базируется на этом представлении. Например имеется:
CREATE VIEW Highrating
AS SELECT cnum, rating FROM Customers
WHERE rating = 300
WHITH CHECK OPTION;
Попытки ввести или изменить значение рейтинга, отличного от 300 будут отвергнуты, но можно попытаться создать новое представление:
CREATE VIEW Vyrating
AS SELECT *
FROM Highrating;
UPDATE Murating
SET rating = 200
WHERE cnum = 2004;
Дата публикования: 2014-11-29; Прочитано: 246 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!