phpmyadmin mysql触发器语法错误

bnlyeluc  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(475)

我试图写一个mysql跳棋,但我不能把我的代码放在phpmyadminmysql没有得到语法错误。有人能帮我吗?
table:

我的触发器:

CREATE TRIGGER after_jeu_insert ON jeu
   AFTER INSERT
   AS
    BEGIN
        DECLARE @gameid int, @oldTurn int, @newTurn int
        SELECT @gameid=idpartie FROM INSERTED
        SELECT @oldturn=tour FROM partie WHERE idpartie=@gameid
        IF(@oldTurn IS NULL)
        {
            SET @newTurn = 1
        }
        ELSE
        {
            IF(@oldTurn==1)
                SET @newTurn = 2
            ELSE
                SET @newTurn = 1
        }
        UPDATE partie SET tour = @newTurn, derniercoup = NOW() WHERE idpartie = @gameid
    END

我没有发现错误,如果有人能帮我,那就太好了。谢谢

zbwhf8kr

zbwhf8kr1#

有许多错误需要纠正。
没有结束的语句。
没有遵循语法顺序。
变量的声明不正确。
从列中选择变量不正确。
不支持基于大括号的时钟。
does表格 inserted 只包含一行?否则你需要一个 where 条款或 limit .
等。
你最好多工作学习。
请参考触发器语法和示例以更好地理解。
按如下所示更改代码,如果数据库对象上一切正常,它可能会工作。

drop trigger if exists after_jeu_insert;

delimiter //

CREATE TRIGGER after_jeu_insert after insert ON jeu for each row
BEGIN
    DECLARE _game_id int;
    DECLARE _old_turn int;
    DECLARE _new_turn int;

    -- following line may not require limit clause
    -- if used proper where condition.
    SELECT idpartie into _game_id FROM INSERTED limit 1; 

    SELECT tour into _old_turn FROM partie WHERE idpartie = _game_id;

    IF _old_turn IS NULL then
        SET _new_turn = 1;
    ELSIF _old_turn = 1 then
        SET _new_turn = 2;
    ELSE
        SET _new_turn = 1;
    END IF;

    UPDATE partie 
       SET tour = _new_turn
         , derniercoup = NOW()
     WHERE idpartie = _game_id;
END;
//

delimiter;

相关问题