PL/SQL - Триггеры: Ваш доброжелательный гид по автоматизации базы данных
Здравствуйте, будущие маги баз данных! Сегодня мы погружаемся в магический мир PL/SQL триггеров. Не волнуйтесь, если вы новички в программировании - я буду вашим верным проводником в этом приключении. К концу этого руководства вы будете создавать триггеры как профи!
Что такое триггеры?
Представьте, что вы библиотекарь (присоединяйтесь ко мне в этом образе). Каждый раз, когда кто-то берет книгу, вам нужно обновить журнал, проверить, не истек ли срок ее возврата, и, может быть, отправить напоминание заимодавцу. Делать это вручную для каждой книги было бы утомительно! Вот где на помощь приходят триггеры.
В мире баз данных триггеры resemble маленьких полезных гномов, которые автоматически выполняют действия при возникновении определенных событий. Это фрагменты кода, которые "срабатывают" в ответ на конкретные операции с базой данных.
Создание триггеров: Давайте脏 руки!
Теперь создадим наш первый триггер. Мы начнем с простого и постепенно перейдем к более сложному.
Основная структура триггера
Вот общая структура триггера:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
[FOR EACH ROW]
[WHEN condition]
DECLARE
-- Объявление переменных
BEGIN
-- Тело триггера
EXCEPTION
-- Обработка исключений
END;
/
Не пугайтесь! Мы разберем это по частям.
Пример 1: Простой триггер "Привет, мир!"
Создадим триггер, который говорит "Привет, мир!" каждый раз, когда в таблицу добавляется новая строка:
CREATE OR REPLACE TRIGGER hello_world_trigger
AFTER INSERT ON employees
BEGIN
DBMS_OUTPUT.PUT_LINE('Привет, мир! Добавлен новый сотрудник!');
END;
/
Что здесь происходит?
-
CREATE OR REPLACE TRIGGER
: Это tells базу данных, что мы создаем новый триггер (или заменяем существующий). -
AFTER INSERT ON employees
: Наш триггер сработает после добавления новой строки в таблицу 'employees'. -
BEGIN...END
: Это место для нашей логики триггера. -
DBMS_OUTPUT.PUT_LINE
: Это просто способ вывести текст.
Пример 2: Логирование изменений
Создадим более полезный триггер, который логирует изменения в таблице 'employees':
CREATE OR REPLACE TRIGGER log_salary_changes
AFTER UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
INSERT INTO salary_change_log (employee_id, old_salary, new_salary, change_date)
VALUES (:OLD.employee_id, :OLD.salary, :NEW.salary, SYSDATE);
END;
/
Что нового здесь?
-
AFTER UPDATE OF salary
: Этот триггер срабатывает только при обновлении столбца 'salary'. -
FOR EACH ROW
: Это означает, что триггер срабатывает для каждой строки,affected обновлением. -
:OLD
и:NEW
: Это refers к старым и новым значениям обновленной строки.
Срабатывание триггера: Совершение магии
Теперь, когда мы создали триггеры, как их запустить? Просто! Выполняя операции с базой данных, за которыми они следят.
Пример 3: Запуск наших триггеров
Давайте увидим наши триггеры в действии:
-- Это запустит наш 'hello_world_trigger'
INSERT INTO employees (employee_id, name, salary)
VALUES (1, 'John Doe', 50000);
-- Это запустит наш 'log_salary_changes' триггер
UPDATE employees
SET salary = 55000
WHERE employee_id = 1;
Когда вы выполните эти команды, за кулисами наши триггеры приходят в действие!
Типы триггеров: Удобная таблица
Вот quick reference таблица различных типов триггеров:
Тип триггера | Описание | Пример использования |
---|---|---|
BEFORE | Срабатывает перед触发ющим действием | Проверка или изменение входных данных перед их вставкой |
AFTER | Срабатывает после触发ующего действия | Логирование изменений или обновление связанных таблиц |
INSERT | Срабатывает на INSERT операции | Автоматическая генерация связанных записей |
UPDATE | Срабатывает на UPDATE операции | Отслеживание изменений данных со временем |
DELETE | Срабатывает на DELETE операции | Поддержание referential integrity |
INSTEAD OF | Используется с представлениями для определения пользовательских операций вставки, обновления или удаления | Реализация сложных обновлений представлений |
Заключение: Ты теперь ученик триггеров!
Поздравляю! Вы сделали первые шаги в мир PL/SQL триггеров. Мы рассмотрели основы создания триггеров, видели их в действии и даже заглянули на различные доступные типы.
Помните, триггеры - это мощные инструменты, но с большой силой приходит большая ответственность. Используйте их мудро, и они сделают вашу работу с базой данных умнее, а не сложнее.
Продолжайте практиковаться, stay curious, и через некоторое время вы станете мастером триггеров! Счастливого кодирования, будущие маги баз данных!
Credits: Image by storyset