Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР №9

.docx
Скачиваний:
2
Добавлен:
28.06.2022
Размер:
107.69 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Национальный исследовательский университет «МИЭТ»

Факультет «Микроприборы и системы управления» (МПСУ)

Кафедра «Вычислительная техника» (ВТ)

Лабораторная работа №9 по дисциплине

«Базы данных»

Тема: «Триггеры, курсоры, транзакции в SQL Server»

Цель работы: получить навыки применения курсоров, использования транзакций, а также работы с триггерами в MS SQL Server.

Продолжительность работы: 4 часа.

Выполнила студентка группы «ИВТ-44»: Никитина София Геннадьевна

Преподаватель: Немченко Дмитрий Игоревич

2021 г.

Содержание

  1. Выполнение работы 3

    1. Триггер AFTER 3

    2. Триггер INSTEAD OF 4

  1. Вывод 6

  1. Выполнение работы

Задание 1. Базу данных, созданную в рамках Л.р. №7,8 дополнить триггерами в соответствии с необходимыми по логике функционирования БД ограничениями. При необходимости использовать механизм курсоров и механизм управления транзакциями.

Задание 2. Проверить работоспособность в БД изменений. Результат занести в отчет.

Триггер AFTER

Раннее обсуждалось, что пол должен указываться как «мужской» или «женский» с ограничением в 7 символов. Создадим триггер, который откатывает изменения в случае неверно указанного пола и принимает изменения в случае верно указанного.

Рисунок 1. Таблица студентов.

Создадим триггер. CREATE OR ALTER – указывает на создание или изменение уже существующего триггера при каждом запуске. DECLARE использовался, т.к. прямая отсылка к измененной ячейке в колонке «Пол» – невозможна. Для этого обратились к курсору в временно созданной таблице inserted, содержащей новые значения. Использование ROLLBACK TRANSACTION откатывает изменения.

CREATE OR ALTER TRIGGER Неверный_пол

ON Студент AFTER UPDATE, Insert

AS IF UPDATE (Пол)

BEGIN

DECLARE @sex VARCHAR(7)

SELECT @sex = (SELECT Пол FROM inserted)

IF (@sex = 'мужской') OR (@sex = 'женский')

BEGIN

PRINT 'Изменение пола успешно'

PRINT ('Указанный пол: ' + @sex)

END

ELSE

BEGIN

PRINT 'Пожалуйста, укажите пол "мужской" или "женский"'

PRINT ('Указанный пол: ' + @sex)

ROLLBACK TRANSACTION

END

END

Запустим триггер с неверными данными:

UPDATE Студент

SET Пол = 'студент'

WHERE НомерСтуденческого = 2301

Рисунок 2. Неверные данные в указании пола.

Запустим триггер с верными данными.

UPDATE Студент

SET Пол = 'мужской'

WHERE НомерСтуденческого = 2301;

Рисунок 3. Верные данные в указании пола.

У нас также существуют ограничения по символам (VARCHAR(7)). Проверим их.

UPDATE Студент

SET Пол = 'менеджер'

WHERE НомерСтуденческого = 2301;

Рисунок 4. Усеченные данные в указании пола.

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

Триггер INSTEAD OF

Допустим, студент Гордон плохо учился и попал в списки на отчисление. Обычный пользователь базы данных больше не хочет видеть его в списках студентов и удалил его. Однако у таблицы «Студент» есть много наследуемых данных в других таблицах «Родственник», «Льгота» и т.д., которые могут понадобится, как и сам «Студент».

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

Триггер INSTEAD OF заменит транзакцию и вместо реального удаления выставит флаг.

CREATE TRIGGER Отчисление

ON Студент

INSTEAD OF DELETE

AS

UPDATE Студент

SET IsDeleted = 1

WHERE НомерСтуденческого =(SELECT НомерСтуденческого FROM deleted)

Создадим такой флаг. Для этого добавим колонку «IsDeleted», которая при ненулевом значении будет указывать на удаленную строку.

ALTER TABLE Студент

ADD IsDeleted smallint;

SELECT * FROM Студент

Рисунок 5. Добавление колонки «IsDeleted».

Попробуем удалить студента из списка.

DELETE FROM Студент

WHERE Фамилия='Гордон';

SELECT * FROM Студент

Рисунок 6. Изменение колонки «IsDeleted» посредством удаления.

Итак, в строке студента появилось значение, которое мы выставили как удаленную строку.

  1. Вывод

Получили навыки применения курсоров, использования транзакций, а также работы с триггерами в MS SQL Server.

Соседние файлы в предмете Базы данных