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

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

10 голосов
/ 06 сентября 2008

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

Ответы [ 4 ]

15 голосов
/ 06 сентября 2008

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

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

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

Некоторые вещи, которые я бы по-прежнему использовал для триггеров

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

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

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

С dev.mysql.com , триггер

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

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

Кратко,

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;

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

0 голосов
/ 23 мая 2013

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

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

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

Чтобы создать триггер:

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


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...