Новичок
5 уроков
(1 час 30 минут)
Курс
Основы SQL для начинающих
На курсе по основам SQL для начинающих вы научитесь работать с такими популярными СУБД, как SQLite, MySQL и PostgreSQL.

#4 – Триггер SQL и его применение

Добро пожаловать на четвертый урок по основам SQL для начинающих. Сегодня вы получите ответ на вопрос, что же такое в SQL триггер.

В языке SQL триггер – это хранимая в базе данных процедура, автоматически вызываемая СУБД при возникновении соответствующих условий. В самом начале видеоурока будет представлена схема создания триггера в SQLite.

В начале схемы указывается тип триггера SQL (временный/не временный), его название, момент запуска (BEFORE, AFTER, INSTEAD), событие (DELETE, INSERT, UPDATE) и название отслеживаемой таблицы. FOR, EACH, ROW означают, что событие будет наступать при работе с каждой записью.

Затем возможно указать дополнительное условие и далее идет тело триггера SQL (между BEGIN и END), которое состоит из нескольких запросов. Внутри тела триггера могут использоваться ссылки на значения полей таблицы, над которой происходит операция. Если, например, происходит вставка новой записи в таблицу, то можно обратиться к этой записи с помощью ключевого слова NEW:

INSERT – NEW пример: NEW.field_name
UPDATE – NEW и OLD пример: NEW.field_name, OLD.field_name
DELETE OLD пример: OLD.field_name

Пример триггера в SQLite

CREAT TRIGGER trigger_name AFTER INSERT ON table_name
FOR EACH ROW
BEGIN
INSERT INTO other_table (field) VALUES (NEW.other_field);
END;

В примере создается триггер SQL для таблицы table_name, который будет срабатывать после вставки и добавлять новую запись в таблицу other_table, со значением поля other_field таблицы table_name.

Пример триггера в MySQL

Создание триггера в MySQL аналогично и отличается только тем, что перед запросом пишется оператор DELIMITER и любой разделитель (в качестве примера использованы два доллара).

DELIMITER $$
CREAT TRIGGER trigger_name AFTER INSERT ON table_name
FOR EACH ROW
BEGIN
INSERT INTO other_table (field) VALUES (NEW.other_field);
END $$
DELIMITER;

Пример триггера в PostgreSQL

В PostgreSQL дело обстоит иначе. Вместо тела триггера необходимо указать название функции типа триггер SQL, которая будет выполняться по наступлению события. То есть перед тем, как добавить триггер, нужно создать функцию.

CREATE OR REPLACE FUNCTION your_function_name()
RETURNS TRIGGER
AS $$
BEGIN
INSERT INTO other_table (field) VALUES (NEW.other_field);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

Важно: если в теле программы использовали ссылку NEW или OLD, обязательно необходимо в конце тела функции вернуть использованную ссылку: RETURN NEW. В PostgreSQL возможно создавать функции на различных языках, но, чтобы создать функцию типа триггер SQL, необходимо в конце указать язык LANGUAGE plpgsql.

После создания функции, напишем триггер SQL для таблицы table_name, который будет срабатывать после вставки и запускать пользовательскую функцию your_function_name().

CREAT TRIGGER trigger_name AFTER INSERT ON table_name
FOR EACH ROW EXECUTE PROCEDURE your_function_name();

После того, как мы с вами разберемся с теорией, можно приступать и к практике. Автор видеоурока предлагает создать две таблицы: таблицу пользователей и их профилей, связанные между собой по идентификатору пользователя. А затем написать три триггера SQL:

  • 1) триггер SQL, который будет срабатывать после добавления в таблицу пользователей новой записи. После этого события в таблице профилей будет создаваться профиль для нового пользователя с указанным идентификатором.
  • 2) триггер SQL, который будет обновлять время изменения или редактирования профиля пользователя.
  • 3) триггер SQL, который перед удалением пользователя будет удалять его профиль.

Данный пример будет рассмотрен во всех трех СУБД. На этом наш видеоурок закончится. Желаем успешного обучения.

Приятного всем просмотра! Учитесь с удовольствием! Всегда ваш LoftBlog!

Материалы к уроку:
Делись:

Оставь комментарий!

Добавить комментарий

Рекомендуемые курсы