Обновление объединенных строк в двух таблицах из триггера INSERT - PullRequest
0 голосов
/ 15 февраля 2012

В настоящее время у меня есть следующий запрос MySQL, который я хотел бы включить в триггер, а не как отдельный запрос.Запрос обновляет данные в две таблицы, которые можно объединять:

UPDATE `testing_names` INNER JOIN `purchase_names`
  ON `testing_names`.`fulldomain` = `purchase_names`.`fulldomain`
SET
  `testing_names`.`account_id` = `purchase_names`.`account_id`,
  `purchase_names`.`purchase_status` = 1
WHERE `purchase_names`.`purchase_status` = 0

Строка (отдельно) вставляется в testing_names.Эта строка ДОЛЖНА иметь соответствующую запись в purchase_names.После вставки строки в testing_names, когда мой запрос UPDATE выполняется в следующий раз, он обновит testing_names.account_id и обновит purchase_names.purchase_status, чтобы эффективно пометить эту задачу как выполненную.

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

До сих пор я успешно создал триггер:

DELIMITER $$
  CREATE TRIGGER `my_trigger` AFTER INSERT
    ON testing_names 
      FOR EACH ROW BEGIN
        UPDATE `testing_names` INNER JOIN `purchase_names`
          ON `testing_names`.`fulldomain` = `purchase_names`.`fulldomain`
        SET
          `testing_names`.`account_id` = `purchase_names`.`account_id`,
          `purchase_names`.`purchase_status` = 1
        WHERE `purchase_names`.`purchase_status` = 0;
      END$$
DELIMITER ;

, но, очевидно, выполняюНовый запрос UPDATE не разрешен, потому что при вставке строки появляется ошибка: #1442 - Can't update table 'testing_names' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

К сожалению, триггер на таблице не может обновить ту же таблицу.

Из документации MySQL :

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

Вместо этого вы можете завершить свое обновление, запустив триггер на обновление имени_каталогов, имя_закупки и еще один триггер на обновление имени_покупки.

0 голосов
/ 25 марта 2012

Попробуйте использовать перед вставкой вместо

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