(mysql)无法更新存储函数/触发器中的表“parts”,因为调用此存储函数/触发器的语句已使用它

7uzetpgm  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(355)

如果条目在表中,我想更新金额,否则插入一个新条目。

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”,因为调用此存储函数/触发器的语句已使用它。
什么是我的错?你知道吗?

pkwftd7m

pkwftd7m1#

你不需要扳机。你想要什么 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) . 目前尚不清楚这种情况如何适应。

相关问题