Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL@variable_Sql_Mysql_Variables_Triggers_Mysql Error 1064 - Fatal编程技术网

MySQL@variable

MySQL@variable,sql,mysql,variables,triggers,mysql-error-1064,Sql,Mysql,Variables,Triggers,Mysql Error 1064,我正在尝试设置一个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; UPDA

我正在尝试设置一个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-插入触发器中没有旧行

谢谢你的帮助

新尝试:

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服务器 要使用的正确语法的版本 近';在第9行结束

触发器语言中没有ENDIF关键字。改用带有空格的END IF

您可以查看的语法文档。

触发器语言中没有ENDIF关键字。改用带有空格的END IF

您可以查看的语法文档