Невозможно обновить таблицу в сохраненном триггере, потому что она уже используется оператором, который вызвал этот сохраненный триггер - PullRequest
0 голосов
/ 10 июня 2018

У меня проблема с триггером в mysql:

CREATE TRIGGER trigger1 BEFORE INSERT ON test1

FOR EACH ROW 

BEGIN 

    **update test1 set  p=new.p where idtest=new.idtest;**

UPDATE kompo set kompo.s=kompo.s -1 where idk = new.idk;

IF (SELECT s - mini FROM kompo WHERE idk = NEW.idk) < 0
THEN 
UPDATE test2 SET kk=kk+1 WHERE idk=NEW.idk;    

END IF;
END$$

. Команда, выделенная жирным шрифтом, вызывает ошибку: Невозможно обновить таблицу в сохраненном триггере, поскольку она уже используется оператором, который вызвал этот сохраненный триггер..

Есть ли у вас идеи, как обновить введенное значение?

Заранее спасибо.

1 Ответ

0 голосов
/ 10 июня 2018

Возможно, это то, что вам действительно нужно:

BEGIN 

    set new.p = new.p * 0.9;

    update kompo
        set kompo.s = kompo.s - 1
        where kompo.idk = new.idk;

    IF (SELECT s - mini FROM kompo WHERE kompo.idk = NEW.idk) < 0 THEN 
        UPDATE test2
            SET kk = kk+1
            WHERE test2.idk = NEW.idk;    

    END IF;
END;

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

...