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 约束时出现语法错误