【问题标题】:phpmyadmin mysql trigger syntax errorphpmyadmin mysql 触发语法错误
【发布时间】:2014-07-21 16:03:44
【问题描述】:

我正在尝试编写一个 mySQL 跳跳虎,但我无法将我的代码放入 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

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

【问题讨论】:

标签: mysql triggers phpmyadmin


【解决方案1】:

有很多错误需要纠正。

  1. 语句没有结束。
  2. 没有遵循语法顺序。
  3. 变量声明不正确。
  4. 从列中选择变量不正确。
  5. 不支持基于大括号的时钟。
  6. inserted 是否只包含一行?否则,您需要 where 子句或 limit

你最好努力学习。
请参考Trigger Syntax and Examples 以获得更好的理解。

如下更改您的代码,如果您的数据库对象一切正常,它可能工作。

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 2014-03-09
    • 2015-08-16
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多