Выполняется ли триггер BEFORE INSERT для каждой строки в запросе «вставка при обновлении дубликата ключа» - PullRequest
1 голос
/ 10 октября 2011

Как это работает?Вызывает ли mysql триггер BEFORE INSERT только в случае вставок или каждый раз, когда вставка или обновление происходит, если запрос, который будет выполнен, выглядит следующим образом "

INSERT INTO tSomething VALUES (...) ON DUPLICATE KEY UPDATE ......

Я хочу обновить значение столбца в зависимости от других значений столбца при вставке строки. Однако я не хочу, чтобы это поведение для обновлений. Запрос, который будет выполняться всегда, будет упомянутымвыше. Я выбрал INSERT AFTER для этого. Однако я не могу обновить col, используя AFTER INSERT TRIGGER, так как

SET NEW.score = NEW.score1 + NEW.score2;

Я прочиталгде-то, что триггер BEFORE INSERT в этом случае позволил бы запускать триггеры каждый раз при выполнении вышеуказанного запроса. Это правда? Если да, как мне решить эту проблему с помощью триггера.

1 Ответ

0 голосов
/ 10 октября 2011

MySQL вызывает триггер AFTER INSERT только в случае вставок или каждый раз, когда происходит вставка или обновление

Справа из руководства :

триггер BEFORE INSERT будет активирован для каждой строки, после чего следует триггер AFTER INSERT или триггеры BEFORE UPDATE и AFTER UPDATE, в зависимости от того, был ли дублирующий ключ для строки

Я не уверен, что именно вы после.

Предложение " Однако я не хочу, чтобы это поведение для обновлений " меня как-то смущало. Если у вас есть только триггер AFTER INSERT, он не будет запущен, если вы выполните инструкцию UPDATE. И если ваш оператор обновляет строку, он будет запускать триггер UPDATE, а не триггер INSERT.

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