Шаг 095. Создаем триггер для лога новых задач

sqlГлава 8. UPDATE, DELETE, транзакции и безопасные изменения

Что делаем

Создаем триггер для лога новых задач

Зачем SEO-специалисту

Триггер автоматически записывает событие, когда в seo_tasks появляется новая строка.

Код. Вставьте 1 в 1

DROP TRIGGER IF EXISTS trg_seo_tasks_insert_log;

CREATE TRIGGER trg_seo_tasks_insert_log
AFTER INSERT ON seo_tasks
BEGIN
    INSERT INTO change_log (entity_name, entity_id, action_name, changed_at, details)
    VALUES ('seo_tasks', NEW.task_id, 'insert', datetime('now'), NEW.task_text);
END;

Построчный разбор: что делает, для чего и как работает

Строка 1: DROP TRIGGER IF EXISTS trg_seo_tasks_insert_log; — Удаляет старый триггер, чтобы новая версия создалась без конфликта имен.
Строка 2: пустая строка — Пустая строка отделяет один смысловой блок кода от другого, чтобы код легче читался.
Строка 3: CREATE TRIGGER trg_seo_tasks_insert_log — Создает автоматическое действие, которое SQLite выполнит при событии в таблице.
Строка 4: AFTER INSERT ON seo_tasks — Указывает событие триггера: сработать после вставки новой строки.
Строка 5: BEGIN — Начинает транзакцию: изменения можно будет сохранить или отменить.
Строка 6: INSERT INTO change_log (entity_name, entity_id, action_name, changed_at, details) — Начинает вставку новых строк в указанную таблицу и перечисляет колонки.
Строка 7: VALUES ('seo_tasks', NEW.task_id, 'insert', datetime('now'), NEW.task_text); — Начинает список значений, которые будут вставлены в перечисленные колонки.
Строка 8: END; — Завершает блок CASE и дает имя рассчитанной колонке.

Что должно получиться

Появится триггер trg_seo_tasks_insert_log.

Если появилась ошибка

Проверьте, что вы работаете в файле seo_lab_from_zero.db, скопировали блок полностью и не потеряли точку с запятой в конце SQL-команды.