SQL | Триггеры
Триггер - это оператор, который система выполняет автоматически при любом изменении базы данных. В триггере мы сначала указываем, когда триггер должен быть выполнен, а затем действие, которое должно выполняться при выполнении триггера. Триггеры используются для указания определенных ограничений целостности и реляционных ограничений, которые нельзя указать с помощью механизма ограничений SQL.
Пример -
Предположим, мы добавляем туппл в таблицу «Доноры», что какой-то человек сдал кровь. Итак, мы можем разработать триггер, который автоматически добавит стоимость сданной крови в таблицу Blood_record.
Типы триггеров -
Мы можем определить 6 типов триггеров для каждой таблицы:
- AFTER INSERT активируется после вставки данных в таблицу.
- ПОСЛЕ ОБНОВЛЕНИЯ: активируется после изменения данных в таблице.
- ПОСЛЕ УДАЛЕНИЯ: активируется после удаления / удаления данных из таблицы.
- ПЕРЕД ВСТАВКОЙ: активируется перед вставкой данных в таблицу.
- ПЕРЕД ОБНОВЛЕНИЕМ: активируется перед изменением данных в таблице.
- ПЕРЕД УДАЛЕНИЕМ: активируется перед удалением / удалением данных из таблицы.
Примеры, показывающие реализацию триггеров:
1. Напишите триггер, чтобы гарантировать, что ни один сотрудник в возрасте до 25 лет не может быть добавлен в базу данных.
разделитель $$ СОЗДАТЬ TRIGGER Check_age ПЕРЕД ВСТАВКОЙ НА сотрудника ДЛЯ КАЖДОЙ РЯДЫ НАЧИНАТЬ ЕСЛИ НОВЫЙ. Возраст <25, ТО СИГНАЛ SQLSTATE '45000' SET MESSAGE_TEXT = 'ОШИБКА: ВОЗРАСТ ДОЛЖЕН БЫТЬ НЕ МЕНЕЕ 25 ЛЕТ! '; КОНЕЦ ЕСЛИ; КОНЕЦ; $$ разделитель;
Объяснение: Каждый раз, когда мы хотим вставить какой-либо кортеж в таблицу «employee», перед вставкой этого кортежа в таблицу будет выполняться триггер с именем «Check_age». Этот триггер проверит атрибут возраста. Если оно больше 25, то этот туппл будет вставлен в туппл, в противном случае будет напечатано сообщение об ошибке «ОШИБКА: ВОЗРАСТ ДОЛЖЕН БЫТЬ НЕ МЕНЕЕ 25 ЛЕТ!»
2. Создайте триггер, который сработает перед удалением в таблице сотрудников, и создайте дублирующую копию записи в другой таблице employee_backup.
Перед написанием триггера нам нужно создать таблицу employee_backup
создать таблицу employee_backup (employee_no int, имя сотрудника varchar (40), задание varchar (40), дата приема на работу, оклад int, первичный ключ (employee_no));
разделитель $$ СОЗДАТЬ резервную копию TRIGGER ПЕРЕД УДАЛЕНИЕМ сотрудника ДЛЯ КАЖДОЙ РЯДЫ НАЧИНАТЬ ВСТАВИТЬ В employee_backup ЗНАЧЕНИЯ (OLD.employee_no, OLD.name, СТАРАЯ. Работа, СТАРАЯ. Наемная работа, СТАРАЯ. Зарплата); КОНЕЦ; $$ разделитель;
Объяснение: Мы хотим создать резервную таблицу, в которой будут храниться данные о тех сотрудниках, которые больше не являются сотрудниками учреждения. Итак, мы создаем триггер с именем Backup, который будет выполняться перед удалением любого Tupple из сотрудника таблицы. Перед удалением значения всех атрибутов таблицы employee будут сохранены в таблице employee_backup.
3. Напишите триггер для подсчета количества новых кортежей, вставленных с помощью каждого оператора вставки.
Объявить count int Установить count = 0; разделитель $$ СОЗДАТЬ ТРИГГЕР Count_tupples ПОСЛЕ ВСТАВКИ НА сотрудника ДЛЯ КАЖДОЙ РЯДЫ НАЧИНАТЬ НАБОР count = count + 1; КОНЕЦ; $$ разделитель;
Explanation: Мы хотим отслеживать количество новых Tupples в таблице сотрудников. Для этого мы сначала создаем переменную count и инициализируем ее значением 0. После этого мы создаем триггер с именем Count_tupples, который будет увеличивать значение count после вставки любого нового Tupple в таблицу employee.