Mysql 如何在触发器中声明变量

Mysql 如何在触发器中声明变量,mysql,sql,triggers,syntax-error,Mysql,Sql,Triggers,Syntax Error,创建触发器时,我会出现以下错误: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第3行附近要使用的正确语法 这是我的疑问: CREATE TRIGGER reserved BEFORE INSERT ON Reserv FOR EACH ROW BEGIN DECLARE trip_id integer; DECLARE free integer; DECLARE count integer; set @free := (select pl

创建触发器时,我会出现以下错误:

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第3行附近要使用的正确语法

这是我的疑问:

CREATE TRIGGER reserved BEFORE INSERT ON Reserv
FOR EACH ROW BEGIN 
    DECLARE trip_id integer;
    DECLARE free integer;
    DECLARE count integer;

    set @free := (select place_free from Trips where id = trip_id);
    set @count := (select count from inserted);

    if @count <= @free
        begin

            update Trips set place_free = @free - @count where id = @trip_id;

        end
    ELSE
        BEGIN
            ROLLBACK;
            return;
        END
 END

我看到的是您正在使用RETURN语句。如各国所述:

触发器中不允许RETURN语句,该语句不能返回 价值。要立即退出触发器,请使用LEAVE语句

但从我的观点来看,这是一个不同的主题,因为错误消息提到了第3行中的语法错误。可能您忘记将分隔符设置为不同于;:


我看到的是您正在使用RETURN语句。如各国所述:

触发器中不允许RETURN语句,该语句不能返回 价值。要立即退出触发器,请使用LEAVE语句

但从我的观点来看,这是一个不同的主题,因为错误消息提到了第3行中的语法错误。可能您忘记将分隔符设置为不同于;:


您使用的是哪种数据库管理系统?该代码是特定于产品的。我使用mysql。您在哪里设置trip\u id?如文所述,我希望@free总是空的。这里有很多错误1一个if必须有一个,然后2 begin和end in,如果mysql中不需要块3一个隐式或显式提交,即触发器中不允许回滚4一个触发器中不允许返回5每个if必须有一个end if 6你声明变量但不使用它们@free不是声明的变量7您可能没有设置分隔符8不是错误,但为了避免与count函数混淆,我将避免使用count作为变量名,您使用的是哪种dbms?该代码是特定于产品的。我使用mysql。您在哪里设置trip\u id?如文所述,我希望@free总是空的。这里有很多错误1一个if必须有一个,然后2 begin和end in,如果mysql中不需要块3一个隐式或显式提交,即触发器中不允许回滚4一个触发器中不允许返回5每个if必须有一个end if 6你声明变量但不使用它们@free不是声明的变量7您可能没有设置分隔符8不是错误,但为了避免与count函数混淆,我将避免使用count作为变量名,
DELIMITER //
CREATE TRIGGER ...