Lab9-10_SQL (1059137), страница 3

Файл №1059137 Lab9-10_SQL (Лабораторная №9-10) 3 страницаLab9-10_SQL (1059137) страница 32017-12-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 3)

1. Создадим представление, не отображающее столбец city. Чтобы создать пред­ставление, которое отображает данные только клиентов из города Феникс, в SQL Server Management Studio откройте новый запрос SQL Server и выполните следующий код.

USE Sales

GO

CREATE VIEW PHX_Customers AS

SELECT fname, lname, address, state, zip, phone

FROM Customers

WHERE City = 'Phoenix'

2. Дабы убедиться, что это представление отображает только те столбцы, кото­рые вы задали, щелкните на кнопке New Query и выполните следующий код

(рис. 10).

USE Sales

SELECT * FROM PHX_Customers

Рис. 10. Список клиентов из Феникса

3. Попытайтесь вставить через представление данные нового клиента. Для этого используйте команду Query=> New Query и выполните следующий код (рис. 11).

USE Sales

INSERT PHX_Customers

VALUES ('Timothy', 'Calunod', '423 Third', 'CA', '95023', ' 9252221212')

Итак, мы создали представление, не позволяющее вставлять новые записи, поскольку в него не включено поле city, которое должно заполняться в таблице Customers. В следующей последовательности действий мы создадим триггер INSTEAD OF, который будет вставлять отсутствующее значение при выполнении вставки через представление.

Рис. 11. Попытка вставки клиента без указания города привела к ошибке

  1. В окне Object Explorer раскройте папку Views=> PHX_Customers для базы данных Sales, щелкните правой кнопкой на папке Triggers и выберите команду New Trigger.

  2. В строке CREATE TRIGGER введите имя триггера (Add_City), в строке ON введите имя представления (dbo. PHX_Customers).

  3. Строку AFTER замените на INSTEAD OF INSERT.

  4. В поле (--Insert statements for trigger here) введите следующий код триггера

DECLARE

@FNAME VARCHAR(20),

@LNAME VARCHAR(20),

@ADDR VARCHAR(50),

@CITY VARCHAR(20),

@STATE STATE,

@ZIP Char(5),

@PHONE CHAR(10)

SET @CITY = 'Phoenix'

SET @FNAME = (SELECT FNAME FROM INSERTED)

SET @LNAME = (SELECT LNAME FROM INSERTED )

SET @ADDR = (SELECT ADDRESS FROM INSERTED)

SET @STATE = (SELECT STATE FROM INSERTED)

SET @ZIP = (SELECT ZIP FROM INSERTED)

SET @PHONE = (SELECT PHONE FROM INSERTED)

INSERT CUSTOMERS

VALUES (@FNAME, @LNAME, @ADDR, @CITY, @STATE, @ZIP, @PHONE)

6. Для создания нового триггера щелкните на кнопке Execute (рис. 12).

7. Для тестирования триггера вновь введите и выполните код:

USE Sales

INSERT PHX_Customers

VALUES ('Timothy', 'Calunod', '123 Third1', 'CA', '94023', '9252221212')

8. Чтобы удостовериться во вставке данных в таблицу Customers с заполнением столбца city, выберите в меню Query=>New Query и выполните следующий

Рис. 12. Создание триггера INSTEAD OF для вставки отсутствующего значения.

запрос (рис. 13).

USE Sales

SELECT * FROM Customers

Рис. 13. С использованием триггера замены вставка клиента была выполнена успешно

9. Закройте окно запросов.

В первой последовательности действий мы создали представление, не отображающее столбец city. Затем мы попытались вставить с помощью представление PHX_Customers новую запись, что нам не удалось, поскольку мы не можем вставлять требуемое значение city в этом представлении. Далее мы создали триггер, который считывает из таблицы inserted все значения, требуемые для вставки, и сохраняет их в переменных памяти, а также создает переменную памяти для хранения отсут­ствующего значения city. После заполнения переменных памяти мы вставили за­пись в таблицу Customers, используя значения, хранящиеся в созданных нами пере­менных.

Триггеры DDL

Как и триггеры DML (Data Manipulation Language), триггеры DDL (Data Definition Language) срабатывают в ответ на событие. Основное различие между триггерами DML и DDL заключается в событии, запускающем их. Триггеры DDL не срабатыва­ют для инструкций INSERT, UPDATE и DELETE, Они предназначены для инструкций CREATE, ALTER, DROP и вообще для любых инструкций, модифицирующих структуру базы данных.

Этот новый тип триггера может оказаться полезным, когда требуется контроли­ровать пользователей, модифицирующих структуру базы данных, их методы моди­фикации, а также отслеживать изменения схемы. Предположим, что вы наняли вре­менных служащих по контракту для работы с базой данных, и вам нужно, чтобы они не могли удалять столбцы, не ставя вас в известность. Для этого вы можете создать триггер DDL. Вы также можете позволить пользователю удалять любые столбцы и использовать триггер DDL для регистрации изменений в таблице.

Создадим триггер DDL, который предотвра­тит удаление или изменение таблиц в базе данных Sales. Чтобы посмотреть, как он работает, до создания триггера удалите связь между таблицами Orders и Products, которая обеспечивает ссылочную целостность данных и не позволит нам удалить или изменить таблицу Products даже без наличия триггера (при попытке удаления таблицы будет появляться сообщение об ограничении внешнего ключа). Для временного удаления (и последующего восстановления) связи воспользуйтесь диаграммой БД.

Для создания триггера выполните следующие действия.

  1. Откройте новый запрос SQL Server и выполните следующий код.

USE Sales

GO

CREATE TRIGGER CantDropCustomers

ON DATABASE

FOR DROP_TABLE, ALTER_TABLE

AS

PRINT 'You must disable Trigger "CantDropCustomers" to drop or alter tables! '

ROLLBACK ;

3. Выполните команду Query=>New Query и протестируй­те новый триггер путем выполнения кода

DROP TABLE Products

4. Вы должны увидеть сообщение об ошибке. В нем говорится, что вы не можете
изменять таблицы, поскольку они защищены новым триггером (рис. 14).

Рис. 14. Создан триггер на запрет удаления и обновления таблицы

5. Закройте SQL Server Management Studio.

Заключение

Триггеры представляют собой сторожевые устройства данных и срабатывают, ког­да пользователь пытается выполнить действие INSERT, UPDATE или DELETE. Эти три типа триггеров можно объединять в любую форму, где каждый триггер рассматрива­ется как неявная транзакция, поскольку SQL Server помещает команду BEGIN TRAN в начало транзакции и инструкцию COMMIT в конце. Для отслеживания вставляемых и удаляемых данных триггеры используют логические таблицы inserted и deleted.

Далее мы создали некоторые триггеры, начав с каждого типа по отдельности, а затем комбинировали два типа (DELETE и UPDATE). Затем мы обсудили управление модификацией данных через представление с помощью триггера INSTEAD OF. Этот специальный тип триггера используется для замены действия инструкций INSERT, UPDATE и DELETE, чтобы сохранить данные в таблицах, на которых основано пред­ставление.

И наконец, мы рассмотрели новые триггеры DDL. С помощью этих триггеров вы можете защитить схему базы данных от случайных или преднамеренных изменений путем перехвата инструкций языка определения данных.

Характеристики

Тип файла
Документ
Размер
4,92 Mb
Тип материала
Высшее учебное заведение

Список файлов лабораторной работы

Лабораторная №9-10
Add_City.sql
AzDel.sql
CheckPN.sql
CheckStock.sql
InvUpdate.sql
Sales.mdf
Sales_log.ldf
lab9-10.sqlsuo
lab9-10.ssmssln
Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6353
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее