带有 "if-elseif" 的触发器不会更新表



因此,为"picks";表格strong文本

delimiter //
create trigger picks_description after insert on picks
for each row
begin
if (new.Picks_Thickness between 0.5 and 0.74) then
insert into Picks (Picks_Desc) values ('медиатор для быстрой игры/ведущей гитары');
elseif (new.Picks_Thickness between 0.87 and 3) then
insert into Picks (Picks_Desc) values ('медиатор для тяжелой игры/ритм-гитары');
end if;
end //

基本上,在我尝试插入新信息后,它不会更新Picks_desc 列

您需要插入前触发器和SET语法

DELIMITER //
CREATE TRIGGER picks_description BEFORE INSERT ON picks
FOR EACH ROW
BEGIN
IF (new.Picks_Thickness between 0.5 and 0.74) THEN
SET NEW.Picks_Desc = 'медиатор для быстрой игры/ведущей гитары';
ELSEIF (new.Picks_Thickness between 0.87 and 3) then
SET NEw.Picks_Desc = 'медиатор для тяжелой игры/ритм-гитары';
END IF;
END //

不能在派生触发器的同一个表的触发器中使用INSERT/UPDATE/DELETE,因为这可能会导致无限循环。

如果我测试你的触发器:

mysql> insert into picks set picks_thickness = '0.6';
ERROR 1442 (HY000): Can't update table 'picks' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

我猜您真正想要的不是插入新行,而是更改生成触发器的当前行的值。为此,您必须更改INSERT之前的值,并使用SET语句进行更改。

create trigger picks_description BEFORE insert on picks
for each row
begin
if (new.Picks_Thickness between 0.5 and 0.74) then
SET new.Picks_Desc = 'медиатор для быстрой игры/ведущей гитары';
elseif (new.Picks_Thickness between 0.87 and 3) then
SET new.Picks_Desc = 'медиатор для тяжелой игры/ритм-гитары';
end if;
end 
CREATE TRIGGER picks_description 
BEFORE INSERT ON picks
FOR EACH ROW
SET NEW.Picks_Desc = CASE WHEN new.Picks_Thickness between 0.5 and 0.74
THEN 'медиатор для быстрой игры/ведущей гитары'
WHEN new.Picks_Thickness between 0.87 and 3
THEN 'медиатор для тяжелой игры/ритм-гитары'
ELSE NEW.Picks_Desc
END;

既不需要BEGIN-END,也不需要DELIMITER。

最新更新