Кашина_ТРиЗБД_ЛБ8
.docxМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
«Владимирский государственный университет
имени Александра Григорьевича и Николая Григорьевича Столетовых» (ВлГУ)
Колледж инновационных технологий и предпринимательства
КАФЕДРА ФИЗИКИ И ПРИКЛАДНОЙ МАТЕМАТИКИ
Лабораторная работа № 8
по дисциплине «Технология разработки и защиты баз данных»
на тему: «Основные принципы управления учетными записями и ролями в MS SQL Server»
Выполнил
студент группы ИПсп-123
Кашина Д. А.
Принял
Кабанова М.Ю.
Владимир, 2025
Цель работы: 1. Изучить назначение и типы триггеров, условий их активации, синтаксиса и семантики команд языка Transact – SQL для их создания, модификации, переименования, программирования и удаления.
2. приобрести навыки их проектирования, кодирования и отладки м применением хранимых процедур для получения информации о триггерах базы данных.
Контрольные вопросы:
Что такое триггер и для чего его необходимо использовать?
Ответ: Триггер SQL Server – это специальный тип хранимых процедур, которые запускаются сервером автоматически при выполнении тех или иных действий с данными таблицы.
К каким событиям может быть применен триггер?
Ответ: Триггеры различаются по типу команд, на которые они реагируют:
– INSERT TRIGGER – запускаются при попытке вставить данные с помощью команды INSERT;
– UPDATE TRIGGER – запускаются при попытке изменения данных с помощью команды UPDATE;
– authsmall TRIGGER – запускаются при попытке удаления данных с помощью команды DELETE.
Параметры FOR, AFTER и INSTEAD OF, указываемые при создании триггера, определяют его поведение следующим образом:
– FOR – запуск триггера при выполнении заданной в этом списке команды;
– AFTER – запуск триггера после успешного выполнения коман списка;
– INSTEAD OF – триггеры вызывается вместо выполнения команд списка.
Ход работы:
Самостоятельно 1.
Самостоятельно 2.
Задания для выполнения на ПК.
Напишите триггер на изменение записи в таблице Teacher. Данный триггер, в случае изменения данных, должен вывести «Запись изменена».
/*Кашина 29.10.25Напишите триггер на изменение записи в таблице Teacher.
Данный триггер, в случае изменения данных, должен вывести «Запись изменена». */
USE University_Кашина_Диана
GO
CREATE TRIGGER Пример_Teacher_Update ON Teacher
FOR UPDATE
AS
BEGIN
PRINT 'Запись изменена'
END
GO
Напишите триггер на добавление и удаление записи из таблицы Teacher. Данный триггер, в случае успешного добавления или удаления данных, должен вывести «Количество строк изменено».
/*Кашина 29.10.25
Напишите триггер на добавление и удаление записи из таблицы Teacher.
Данный триггер, в случае успешного добавления или удаления данных,
должен вывести «Количество строк изменено».*/
USE University_Кашина_Диана
GO
CREATE TRIGGER Пример_Teacher_Insert_Delete ON Teacher
FOR INSERT, DELETE
AS
BEGIN
PRINT 'Количество строк изменено'
END
Напишите триггер на добавление, изменение и удаление данных в таблице Teacher. Данный триггер должен вывести «{Текущий пользователь} изменил таблицу. Время: {текущее время}».
/*Кашина 29.10.25
3. Напишите триггер на добавление, изменение и удаление данных в таблице Teacher.
Данный триггер должен вывести «{Текущий пользователь} изменил таблицу. Время: {текущее время}».*/
USE University_Кашина_Диана
GO
CREATE TRIGGER Пример_Teacher_All ON Teacher
FOR INSERT, UPDATE, DELETE
AS
BEGIN
PRINT USER_NAME() + ' изменил таблицу. Время: ' + CONVERT(VARCHAR, GETDATE(), 120)
END
Напишите триггер на изменение записи в таблице Teacher. Данный триггер, при попытке изменения данных, должен вывести «Нельзя редактировать данные».
/*Кашина 29.10.25
Напишите триггер на изменение записи в таблице Teacher. Данный триггер, при
попытке изменения данных, должен вывести «Нельзя редактировать данные». */
USE University_Кашина_Диана
GO
CREATE TRIGGER Пример_Teacher_NoUpdate ON Teacher
FOR UPDATE
AS
BEGIN
PRINT 'Нельзя редактировать данные'
ROLLBACK TRANSACTION
END
Создать таблицу Teacher_{Ваша_фамилия}, которая будет содержать фамилии удаленных преподавателей и даты их удаления. Написать триггер, который будет фиксировать в таблице Teacher_{Ваша_фамилия} данные преподавателей при удалении из таблицы Teacher, в том случае, если у них остались однофамильцы в таблице Teacher.
/*Кашина 29.10.25
5. Создать таблицу Teacher_{Ваша_фамилия}, которая будет содержать фамилии
удаленных преподавателей и даты их удаления. Написать триггер, который будет
фиксировать в таблице Teacher_{Ваша_фамилия} данные преподавателей при удалении
из таблицы Teacher, в том случае, если у них остались однофамильцы в таблице Teacher. */
USE University_Кашина_Диана
GO
CREATE TABLE Teacher_Kashina (
RecordID INT IDENTITY(1,1) PRIMARY KEY,
TeacherCode INT NOT NULL,
TeacherName VARCHAR(50) NULL,
Position VARCHAR(50) NULL,
AcademicRank VARCHAR(50) NULL,
DeletionDate DATETIME NOT NULL,
Note NVARCHAR(200)
)
GO
CREATE TRIGGER Trigger_Teacher_Kashina ON Teacher
FOR DELETE
AS
BEGIN
INSERT INTO Teacher_Kashina (TeacherCode, TeacherName, Position, AcademicRank, DeletionDate, Note)
SELECT
d.kod_teacher,
d.name_teacher,
d.dolgnost,
d.zvanie,
GETDATE() AS DeletionDate,
'Удален преподаватель с однофамильцами' AS Note
FROM deleted d
WHERE EXISTS (
SELECT 1
FROM Teacher t
WHERE t.name_teacher = d.name_teacher
AND t.kod_teacher <> d.kod_teacher
)
END
Напишите команды для приостановления и запуска триггера из предыдущей задачи.
/*Кашина 29.10.25
Напишите команды для приостановления и запуска триггера из предыдущей задачи. */
-- Команда для приостановления (отключения) триггера
DISABLE TRIGGER Trigger_Teacher_Kashina ON Teacher;
-- Команда для запуска (включения) триггера
ENABLE TRIGGER Trigger_Teacher_Kashina ON Teacher;
Напишите команды для удаления всех созданных вами триггеров.
/*Кашина 29.10.25
Напишите команды для удаления всех созданных вами триггеров.*/
USE University_Кашина_Диана
DROP TRIGGER Пример_Teacher_Update;
DROP TRIGGER Пример_Teacher_Insert_Delete;
DROP TRIGGER Пример_Teacher_All;
DROP TRIGGER Пример_Teacher_NoUpdate;
DROP TRIGGER Trigger_Teacher_Kashina;
