phpmyadmin mysql触发语法错误

X4V18

我正在尝试编写mySQL tigger,但如果没有语法错误,就无法将代码放入phpMyAdmin MySQL中。有谁可以帮助我吗?

桌子:

游戏

我的触发器:

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

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

拉温德·雷迪

有很多错误可以纠正。

  1. 声明无尽。
  2. 不遵循语法顺序。
  3. 变量声明不正确。
  4. 从列中选择变量不正确。
  5. 不支持基于括号的时钟。
  6. 表格inserted仅包含一行吗?否则,您需要一个where子句或limit
  7. 等等

您最好多学习。
请参考触发器语法和示例以更好地理解。

如下更改代码,如果在数据库对象上一切正常,它可能会起作用。

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;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章