MySQL после вставки и после обновления триггер - PullRequest
1 голос
/ 09 мая 2009

У меня есть две таблицы t1 и t2. я создал два триггера tr1 после вставки на t1 и tr2 после обновления на t2. в обеих таблицах я обновляю таблицу t2. поэтому выдает ошибку, говоря, что таблица t2 уже обновляется в другом триггере, поэтому не может обновить ее снова.

Пожалуйста, дайте мне знать, если кто-нибудь сталкивался с такой проблемой и исправил ее.

Заранее спасибо! MySQL DBA.

Ответы [ 2 ]

22 голосов
/ 09 мая 2009

Если вы хотите изменить данные , которые обновляются или вставляются , вы должны использовать триггер BEFORE UPDATE и / или BEFORE INSERT, а затем использовать псевдоним NEW (он ссылается на строку, то есть вставляется или строка, как она будет выглядеть после применения обновления) - вы можете изменить поля, которые вставляются. Старый псевдоним ссылается на строку до применения обновления или на строку перед его удалением (в триггерах, которые запускаются при удалении).

Так что, вероятно, для триггера tr2 вам нужно что-то вроде:

DELIMITER $$
    CREATE TRIGGER tr2 BEFORE UPDATE ON t2
    FOR EACH ROW BEGIN
      SET NEW.field1 = some_value_you_want_to_set_it_to;
    END;
$$
DELIMITER ;

Поскольку в триггере вы на самом деле не можете ОБНОВИТЬ таблицу, которая уже обновляется, это правильно.

0 голосов
/ 09 июня 2009

Я исправил эту проблему, возникла проблема, поскольку я пытался обновить и вставить в одну и ту же таблицу tb1 из двух триггеров, но Mysql не позволяет изменять одну и ту же таблицу, я полагаю.

Спасибо

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