Я не могу обновить свою таблицу с помощью триггера в MySQL - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь заполнить пустое поле в таблице после обновления этой таблицы, но я получаю эту ошибку:

#1442 - Can't update table 'services_offer' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Как это исправить?

запрос моего триггера:

DELIMITER $$
Create trigger OfferSum 
after UPDATE
on Services_Offer
FOR EACH ROW
BEGIN
    UPDATE Services_Offer
    SET NEW.final_price = 
    (SELECT service_price from Services_Level
    where Services_Level.level_code= Services_Offer.level_code)*Services_Offer.service_size;

END$$

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Зачем вам для этого триггер? Похоже, что приведенный выше запрос приведет к бесконечному циклу. Каждый раз, когда вы обновляете строку, она вызывает триггер обновления, который фактически обновляет таблицу и, таким образом, вызывает триггер снова, снова и снова, пока что-то не происходит.

Вместо этого, почему бы вам не рассчитать и не обновить столбец с первоначальным обновлением. Запрос будет выглядеть так:

UPDATE Services_Offer 
SET 
    column1 = value1, 
    column2 = value2, 
    final_price = 
      ( 
        SELECT service_price 
        FROM Services_Level 
        WHERE Services_Level.level_code = Services_Offer.level_code
      ) * service_size
WHERE id = XXX

где column1 = значение1, column2 = значение2 исходит из вашего первоначального запроса на обновление.

0 голосов
/ 12 января 2019

Я думаю, вы хотите до триггера обновления:

DELIMITER $$

CREATE TRIGGER OfferSum BEFORE UPDATE ON Services_Offer
FOR EACH ROW
BEGIN
    SELECT NEW.final_price := sl.service_price * NEW.service_size
    FROM Services_Level sl
    WHERE sl.level_code = NEW.level_code;
END$$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...