как активировать триггер после всех массовых вставок в MySQL - PullRequest
4 голосов
/ 01 марта 2010

Я использую mysql, и у меня на столе есть массовые вставки. Я сомневаюсь, что если я создам триггер, указывающий after insert, то триггер будет активирован для каждого insert after, чего я не хочу, чтобы оно происходило.

Есть ли способ активировать триггер после завершения всех массовых вставок?

Какой совет?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 24 марта 2010

посмотрите здесь и посмотрите, сможете ли вы реализовать этот трюк, который в основном включает триггер в оператор if, управляемый переменной, которую вы можете включать и выключать

if (@DISABLE_TRIGER <> 1 ) then
#trigger body
end if;

, а затем, если вы хотите отключить триггеры при импорте, просто:

SET @DISABLE_TRIGER = 1;

#do imports

SET @DISABLE_TRIGER = 0;
1 голос
/ 01 марта 2010

Если вас беспокоит производительность, вы можете быть уверены, что операция выполняется довольно быстро, даже если она выполняется для каждой вставленной строки отдельно. Но если вы действительно думаете, что это приведет к проблемам с производительностью, вам следует профилировать.

Единственная альтернатива, о которой я могу подумать, это сбросить триггер, выполнить запрос вставки и повторно добавить триггер, что на самом деле является ужасным решением (к сожалению, вы не можете отключить триггеры для сеанса в mysql - на самом деле вы не можете отключить их на все).

0 голосов
/ 01 марта 2010

Синтаксис триггера (>> после вставки в <<) по своей сути говорит, что это будет сделано для каждой вставки. Я не знаю, как это отключить. Возможный обходной путь может заключаться в том, чтобы в вашем операторе вставки был флаг (какое-то магическое значение для одного из столбцов, например, столбец идентификатора -200?), Который имеет значение только для самой последней вставки, а затем был бы оператор if, находящийся в вашем триггере, который проверяет флаг. Чувствуется немного как взломать хотя. Возможно, вы можете дать нам немного больше контекста, возможно, есть лучший способ снять шкуру с этой кошки. </p>

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