Настройка триггеров MySQL

Я слышал о триггерах, и у меня есть несколько вопросов. Что такое триггеры? Как их настроить?
Есть ли какие-либо меры предосторожности, кроме типичных SQL-запросов, которые следует предпринять?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
10
0
2 005
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Триггер - это именованный объект базы данных, связанный с таблицей и активируемый, когда для таблицы происходит определенное событие.
Для создания триггера:

CREATE TRIGGER triggerName [BEFORE|AFTER] [INSERT|UPDATE|DELETE|REPLACE] ON tableName FOR EACH ROW SET stuffToDoHERE;


Несмотря на то, что я ответил на эту часть, другой вопрос все еще в силе.

От dev.mysql.com триггер

...a named database object that is associated with a table and that is activated when a particular event occurs for the table.

Синтаксис для их создания также задокументировано на этом сайте.

Вкратце,

CREATE
    [DEFINER = { user | CURRENT_USER }]
    TRIGGER trigger_name trigger_time trigger_event
    ON tbl_name FOR EACH ROW trigger_stmt

И они приводят пример:

CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;

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

Ответ принят как подходящий

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

Я не могу конкретно комментировать mysql.

Меры предосторожности: триггеры могут быть очень заманчивыми, когда вы впервые начинаете их использовать, они кажутся волшебной пулей для всех видов проблем. Но они делают "волшебные" вещи, если вы не знаете базу данных наизнанку, может показаться, что происходят действительно странные вещи (например, вставки в другие таблицы, изменение входных данных и т. д.). Прежде чем реализовывать вещи в качестве триггера, я бы серьезно подумал о том, чтобы вместо этого принудительно использовать API вокруг схемы (желательно в базе данных, но вне, если вы не можете).

Для некоторых вещей я бы все еще использовал триггеры

  • Отслеживание полей date_created и date_last_edited
  • Вставка идентификаторов (в oracle, где нет поля автоматического идентификатора)
  • Ведение истории изменений

Вещи, для которых вы не хотели бы использовать триггеры

  • бизнес-правила / логика
  • все, что подключается за пределами базы данных (например, вызов веб-службы)
  • Контроль доступа
  • Все, что не является транзакционным (все, что вы делаете в триггере, ДОЛЖНО иметь возможность отката с транзакцией)

Этот вопрос старый, а другие ответы очень хорошие, но поскольку пользователь спросил о мерах предосторожности, которые следует предпринять, я хочу кое-что добавить:

  • Если вы используете репликацию в сложной среде, не следует массово использовать триггеры и не вызывать хранимые процедуры из триггеров.
  • Триггеры в MySQL работают медленно.
  • Вы не можете использовать некоторые операторы SQL в триггерах. И некоторые операторы разрешены, но их следует избегать, например LOCK. Общее правило таково: если вы не до конца понимаете последствия того, что делаете, не делайте этого.
  • Триггеры могут вызывать бесконечные циклы, поэтому будьте осторожны.

Другие вопросы по теме