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

Кашина_ТРиЗБД_ЛБ8

.docx
Скачиваний:
0
Добавлен:
03.12.2025
Размер:
378.82 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

«Владимирский государственный университет

имени Александра Григорьевича и Николая Григорьевича Столетовых» (ВлГУ)

Колледж инновационных технологий и предпринимательства

КАФЕДРА ФИЗИКИ И ПРИКЛАДНОЙ МАТЕМАТИКИ

Лабораторная работа № 8

по дисциплине «Технология разработки и защиты баз данных»

на тему: «Основные принципы управления учетными записями и ролями в MS SQL Server»

Выполнил

студент группы ИПсп-123

Кашина Д. А.

Принял

Кабанова М.Ю.

Владимир, 2025

Цель работы: 1. Изучить назначение и типы триггеров, условий их активации, синтаксиса и семантики команд языка Transact – SQL для их создания, модификации, переименования, программирования и удаления.

2. приобрести навыки их проектирования, кодирования и отладки м применением хранимых процедур для получения информации о триггерах базы данных.

Контрольные вопросы:

  1. Что такое триггер и для чего его необходимо использовать?

Ответ: Триггер SQL Server – это специальный тип хранимых процедур, которые запускаются сервером автоматически при выполнении тех или иных действий с данными таблицы.

  1. К каким событиям может быть применен триггер?

Ответ: Триггеры различаются по типу команд, на которые они реагируют:

– INSERT TRIGGER – запускаются при попытке вставить данные с помощью команды INSERT;

– UPDATE TRIGGER – запускаются при попытке изменения данных с помощью команды UPDATE;

– authsmall TRIGGER – запускаются при попытке удаления данных с помощью команды DELETE.

Параметры FOR, AFTER и INSTEAD OF, указываемые при создании триггера, определяют его поведение следующим образом:

– FOR – запуск триггера при выполнении заданной в этом списке команды;

– AFTER – запуск триггера после успешного выполнения коман списка;

– INSTEAD OF – триггеры вызывается вместо выполнения команд списка.

Ход работы:

Самостоятельно 1.

Самостоятельно 2.

Задания для выполнения на ПК.

  1. Напишите триггер на изменение записи в таблице Teacher. Данный триггер, в случае изменения данных, должен вывести «Запись изменена».

/*Кашина 29.10.25Напишите триггер на изменение записи в таблице Teacher.

Данный триггер, в случае изменения данных, должен вывести «Запись изменена». */

USE University_Кашина_Диана

GO

CREATE TRIGGER Пример_Teacher_Update ON Teacher

FOR UPDATE

AS

BEGIN

PRINT 'Запись изменена'

END

GO

  1. Напишите триггер на добавление и удаление записи из таблицы Teacher. Данный триггер, в случае успешного добавления или удаления данных, должен вывести «Количество строк изменено».

/*Кашина 29.10.25

Напишите триггер на добавление и удаление записи из таблицы Teacher.

Данный триггер, в случае успешного добавления или удаления данных,

должен вывести «Количество строк изменено».*/

USE University_Кашина_Диана

GO

CREATE TRIGGER Пример_Teacher_Insert_Delete ON Teacher

FOR INSERT, DELETE

AS

BEGIN

PRINT 'Количество строк изменено'

END

  1. Напишите триггер на добавление, изменение и удаление данных в таблице 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

  1. Напишите триггер на изменение записи в таблице Teacher. Данный триггер, при попытке изменения данных, должен вывести «Нельзя редактировать данные».

/*Кашина 29.10.25

Напишите триггер на изменение записи в таблице Teacher. Данный триггер, при

попытке изменения данных, должен вывести «Нельзя редактировать данные». */

USE University_Кашина_Диана

GO

CREATE TRIGGER Пример_Teacher_NoUpdate ON Teacher

FOR UPDATE

AS

BEGIN

PRINT 'Нельзя редактировать данные'

ROLLBACK TRANSACTION

END

  1. Создать таблицу 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

  1. Напишите команды для приостановления и запуска триггера из предыдущей задачи.

/*Кашина 29.10.25

Напишите команды для приостановления и запуска триггера из предыдущей задачи. */

-- Команда для приостановления (отключения) триггера

DISABLE TRIGGER Trigger_Teacher_Kashina ON Teacher;

-- Команда для запуска (включения) триггера

ENABLE TRIGGER Trigger_Teacher_Kashina ON Teacher;

  1. Напишите команды для удаления всех созданных вами триггеров.

/*Кашина 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;