Перейти к основному содержимому
Модуль 12 · Урок 4 из 448/57 в курсе~12 min
Уроки модуля (4/4)

Практические триггеры и аудит

Теперь, когда мы научились создавать умные пули (функции триггера), нам нужно установить их на настоящее заряженное оружие, ожидающее события: вот и настоящие триггеры! Триггер формально присоединяет ранее созданную функцию и дает ей указание запустить «ДО» или «ПОСЛЕ» определенное событие CRUD в данной таблице.

Есть много вариантов; например, FOR EACH ROW запускает его один раз для каждой затронутой строки, поэтому, если массовый запрос представляет собой ГЛОБАЛЬНОЕ ОБНОВЛЕНИЕ более 5 миллионов строк, он будет запускать 5 миллионов микровыполнений — будьте с этим осторожны!

SQL
CREATE TRIGGER sync_inventory_trigger
-- Event options
AFTER INSERT OR UPDATE ON order_items
-- Modus operandi (singular or global macro-block FOR EACH STATEMENT)
FOR EACH ROW
-- Run the forged action
EXECUTE FUNCTION update_stock();

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

Автоматизация Updated_At

Существует вечная бизнес-проблема, когда мы забываем передать { updated_at: new Date() } в наших моделях обновления JS. Триггерная функция set_updated_at в сочетании с триггером BEFORE UPDATE устраняет эту неприятность, автоматически обновляя каждое изменение записи автоматически.

Попробуйте сами

Упражнение#sql.m12.l4.e1
Попыток: 0Загрузка…

Создайте триггер с именем «trg_force_uppercase».\nПрикрепите его на этапе «ПЕРЕД ВСТАВКОЙ» в таблице «customers».\nПринудительно выполните построчное вычисление «ДЛЯ КАЖДОЙ СТРОКИ» и вызовите выполнение функции «force_uppercase_name()».\nПримечание: также заново создайте UDF «force_uppercase_name» (поскольку среда изолирована) в верхней части кода, затем добавьте триггер декларация.

Загрузка редактора…
Показать подсказку

Синтаксис текста: сначала создайте функцию, затем добавьте CREATE TRIGGER trg_force_uppercase ПЕРЕД ВСТАВКОЙ ДЛЯ клиентов ДЛЯ КАЖДОЙ СТРОКИ ВЫПОЛНИТЬ ФУНКЦИЮ Force_uppercase_name();

Решение доступно после 3 попыток

Упражнение#sql.m12.l4.e2
Попыток: 0Загрузка…

Убейте датчик! Иногда мы хотим отправить необработанные исходные файлы или временные собственные изменения, минуя шумные проверки.\nУдалить триггер невероятно просто (вы не удаляете органическую функцию, вы удаляете только привязку датчика).\nИспользуйте ключевое слово «DROP TRIGGER», указав имя и глобальное вложение.

Загрузка редактора…
Показать подсказку

Не забудьте указать откуда. DROP TRIGGER trg_force_uppercase НА клиентах;

Решение доступно после 3 попыток