phpmyadmin mysql 触发语法错误

Posted

技术标签:

【中文标题】phpmyadmin mysql 触发语法错误【英文标题】:phpmyadmin mysql trigger syntax error 【发布时间】: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

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

【问题讨论】:

在此处发布您的表定义sqlfiddle.com 【参考方案1】:

有很多错误需要纠正。

    语句没有结束。 没有遵循语法顺序。 变量声明不正确。 从列中选择变量不正确。 不支持基于大括号的时钟。 表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;

【讨论】:

以上是关于phpmyadmin mysql 触发语法错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试编写 MySQL 触发器以替换 phpmyadmin 上的 CHECK 约束时出现语法错误

TRIGGER 语法错误 mysql 说 #1303 - 无法从另一个存储的例程中创建触发器 - phpmyadmin

Phpmyadmin 在“END”附近创建触发器语法错误

phpmyAdmin 中的 MySQL 触发器错误

phpmyadmin 中的 MYSQL 触发器语法问题

在 phpmyadmin 上插入触发器