我正在尝试设置一个 MySQL 触发器,但我无法弄清楚如何准确地完成我想要完成的工作。我想我需要设置一个 MySQL @variable 但我尝试过的方法没有奏效,而且我无法找到一个好的资源来解决它。我更改了phpMyAdmin中的分隔符,实际查询中没有使用下面的注释。
CREATE TRIGGER coroner AFTER INSERT ON events
FOR EACH ROW BEGIN
UPDATE teams SET live = live-1 WHERE id = NEW.victim;
UPDATE teams SET score = score+NEW.value WHERE id = NEW.shooter;
UPDATE teams SET last_active = NEW.time WHERE id = NEW.shooter OR id = NEW.victim;
// up to here all works fine
IF (SELECT live FROM teams WHERE id = NEW.victim) = 0 THEN
UPDATE teams SET slot = slot-1 WHERE slot > OLD.slot;
ENDIF;
END
我在这里实际上是把一个团队排成一个圆圈,当团队的最后一个球员被淘汰时,我会在没有它的情况下关闭圆圈。
这是来自 phpMyAdmin 的错误消息:
#1363 - INSERT 触发器中没有 OLD 行
谢谢你的帮助
新尝试:
CREATE TRIGGER coroner AFTER INSERT ON events
FOR EACH ROW BEGIN
UPDATE teams SET live = live-1 WHERE id = NEW.victim;
UPDATE teams SET score = score+NEW.value WHERE id = NEW.shooter;
UPDATE teams SET last_active = NEW.time WHERE id = NEW.shooter OR id = NEW.victim;
SET @pivot := (SELECT slot FROM teams WHERE id = NEW.victim);
IF (SELECT live FROM teams WHERE id = NEW.victim) = 0 THEN
UPDATE teams SET slot = slot+1 WHERE slot < @pivot;
ENDIF;
END
错误:
#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '; 附近使用的正确语法。END'在第 9 行