(MySQL) Невозможно обновить таблицу 'PARTS' в хранимой функции / триггере, потому что она уже используется оператором, который вызвал эту хранимую функцию / триггер - PullRequest
0 голосов
/ 19 декабря 2018

Я хочу, чтобы сумма была обновлена, если запись находится в таблице, иначе вставляется новая.

delimiter $$
CREATE TRIGGER t 
BEFORE INSERT 
ON PARTS
for each row

BEGIN
  if exists (SELECT Part_name FROM PARTS where part_name = new.part_name) then
      UPDATE PARTS SET amount=amount+NEW.amount WHERE 
      Part_name=NEW.Part_name;
   end if;
END $$
delimiter ;

Когда я пытаюсь:

mysql> insert into PARTS(Part_name,amount,Storage_ID) values('barley',1000,1);

Тогда я получилэта ошибка:

ОШИБКА 1442 (HY000): невозможно обновить таблицу 'PARTS' в сохраненной функции / триггере, поскольку она уже используется оператором, который вызвал эту сохраненную функцию / триггер.

В чем моя вина?Есть идеи?

1 Ответ

0 голосов
/ 19 декабря 2018

Вам не нужен триггер.Вы хотите insert on duplicate key update:

insert into PARTS(Part_name, amount, Storage_ID)
    values('barley', 1000, 1)
    on duplicate key update amount = amount + values(amount);

Чтобы это работало, вам необходим уникальный индекс или первичный ключ для parts(part_name).Или возможно на parts(part_name, storage_id).Неясно, как это вписывается.

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