|
Программирование >> Построение запросов sql
UPDATE Abonent Information SET NAME = СИМКИНА З.А. WHERE CODE = 136159; DELETE FROM Abonent Information WHERE CODE = 123456;. Данные, получаемые в результате выполнения запроса SELECT * FROM Abonent Information; представлены на рис. 5.20.
Рис. 5.20. Данные представления AbonentInformation после обновления и удаления Если пользователь попытается вставить или обновить значение поля NAME для абонента с номером лицевого счета 005488, установив фамилию абонента, например, как МОРОЗОВ А.Н. с помощью следующего запроса: UPDATE Abonent Information SET NAME = МОРОЗОВ А.Н. WHERE CODE = 005488;, то подобный запрос потерпит неудачу из-за того, что при создании представления было использовано предложение WITH CHECK OPTION. Будет выдано сообщение об ошибке следующего содержания: Operation violates CHECK constraint on view or table AbonentInformation . Если пользователь выполнит следующий запрос на удаление: DELETE FROM Abonent Information WHERE NAME LIKE М%;, то в данном случае ошибки не возникнет, но в самой таблице Abonent никаких изменений не произойдёт (в данном случае это не является следствием использования предложения WITH CHECK OPTION, а есть следствие применения в запросе представления условия поиска WHERE Fio NOT LIKE М%). Чтобы пояснить результаты действия раздела WITH CHECK OPTION, рассмотрим еще один пример. Допустим, что в базе данных созданы два обновляемых представления: Nach Information 20, показывающее информацию о начислениях с суммами, меньшими 20 (идентификатор факта начисления, номер лицевого счета абонента и начисленная сумма), и Nach Information 15, отображающее данные предыдущего представления с суммами более 15. Запросы на создание этих двух представлений будут выглядеть следующим образом: CREATE VIEW Nach Information 20 (Fact, Code, Summa) AS SELECT NachislFactCD, AccountCD, NachislSum FROM NachislSumma WHERE NachislSum<20 [WITH CHECK OPTION]; CREATE VIEW Nach Information 15 AS SELECT Fact, Code, Summa FROM Nach Information 20 WHERE Summa >15 [WITH CHECK OPTION]; Данные, получаемые после выполнения запроса SELECT * FROM Nach Information 20;, представлены на рис. 5.21.
Рис. 5.21. Данные представления Nach Information 20 Данные, получаемые после выполнения запроса SELECT * FROM Nach Information 15;, представлены на рис. 5.22.
Рис. 5.22. Данные представления Nach Information 15 В каждом из представлений Nach Information 20 и Nach Information 15 может отсутствовать или присутствовать предложение WITH CHECK OPTION. Рассмотрим, что будет происходить в каждом из возможных случаев при выполнении следующих двух запросов на модификацию строк (будем называть эти запросы U1 и U2 соответственно): UPDATE Nach Information 15 SET Summa = Summa + 5; UPDATE Nach Information 15 SET Summa = Summa - 5;. Случай 1. Ни в одном из представлений не содержится раздел WITH CHECK OPTION. Допустим, был выполнен запрос U1 на увеличение начисленных сумм. После выполнения запроса U1 представление Nach Information 15 оказывается пустым. Его строки перестают удовлетворять условию представления Nach Information 20 и исчезают из него. Данные представления Nach Information 20 после выполнения запроса U1 показаны на рис. 5.23.
Рис. 5.23. Данные представления Nach Information 20 после выполнения запроса U1 Этот результат может быть неожиданным для пользователей базы данных, которым известно, что условие представления Nach Information 15 имеет вид Summa>15 и соблюдение этого условия должно сохраняться при увеличении размера начисления. В то же время в таблице NachislSumma обновляются значения полей NachislSum для 6 записей (с идентификаторами факта начисления 6, 21, 32, 34, 40, 50). После выполнения запроса U2 представление Nach Information 15 также оказывается пустым. Данные представления Nach Information 20 после выполнения запроса U2 показаны на рис. 5.24.
Рис. 5.24. Данные представления Nach Information 20 после выполнения запроса U2
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |