Можно ли использовать триггер mysql для блокировки вставки? - PullRequest
1 голос
/ 14 февраля 2011

У меня есть таблица почтовой очереди и таблица черного списка электронной почты. Вставки в таблицу почтовых очередей выполняются в миллионах (буквально я считал) мест по всему коду. Мне было поручено блокировать электронные письма людей из черного списка. Могу ли я сделать триггер в таблице почтовой очереди, который отклоняет вставки, если адрес находится в таблице черного списка?

Возможно, есть лучший способ сделать это?

1 Ответ

3 голосов
/ 16 февраля 2011

Из книги ' Высокопроизводительное MySQL Second Edition ':

Иногда вы даже можете обойти ограничение FOR EACH ROW.Роланд Буман обнаружил, что ROW_COUNT () всегда сообщает 1 внутри триггера, за исключением первой строки триггера BEFORE.Вы можете использовать это, чтобы предотвратить выполнение кода триггера для каждой затронутой строки и запускать его только один раз для каждого оператора.Это не то же самое, что триггер для каждого оператора, но в некоторых случаях это полезный метод для эмуляции триггера до оператора.Такое поведение на самом деле может быть ошибкой, которая в какой-то момент будет исправлена, поэтому вы должны использовать ее с осторожностью и убедиться, что она все еще работает, когда вы обновляете свой сервер.Вот пример того, как использовать этот хак:

CREATE TRIGGER fake_statement_trigger
BEFORE INSERT ON sometable
FOR EACH ROW
BEGIN
DECLARE v_row_count INT DEFAULT ROW_COUNT( );
IF v_row_count <> 1 THEN
-- Your code here
END IF;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...