phpmyAdmin 中的 MySQL 触发器错误

Posted

技术标签:

【中文标题】phpmyAdmin 中的 MySQL 触发器错误【英文标题】:MySQL Trigger ERROR in phpAdmin 【发布时间】:2011-07-10 09:27:55 【问题描述】:

嗨 此 TRIGGER 语句中是否有任何错误。当我尝试在 phpAdmin 中运行它时,它会给出错误提示“#1064 - 您的 SQL 语法有错误;请查看与您的 mysql 服务器版本相对应的手册以获取正确的语法在“SELECT Count(*) into SIM_CCode_Count”附近使用。我不明白这有什么问题..请帮助我

这是我的触发语句

CREATE TRIGGER Is_CountryCode_There After INSERT on mr_details FOR EACH ROW

BEGIN 

DECLARE SIM_CCode_Count INTEGER;
DECLARE NET_CCode_Count INTEGER;


SELECT Count(*) into SIM_CCode_Count FROM Country_Main where CountryCode=NEW.SimCntISO;

IF SIM_CCode_Count=0 THEN
INSERT INTO Country_Main(CountryCode,CountryName) Values(NEW.SIMCntISO,"Unknown");
END IF

If NEW.SimCntISO<>NEW.NetCntISO then

SELECT Count(*) into NET_CCode_Count FROM Country_Main
where CountryCode=NEW.NetCntISO

IF NET_CCode_Count=0 THEN
INSERT INTO Country_Main(CountryCode,CountryName) Values(NEW.NETCntISO,"Unknown");
END IF


END IF
END

【问题讨论】:

【参考方案1】:

如果没有正确解释您的要求和表格以及您期望此触发器做什么,很难说您的触发器中是否存在任何问题.. 但据我所知,需要做一些小的修正。 试试这个代码,并详细说明您的要求..

CREATE TRIGGER Is_CountryCode_There After INSERT on mr_details FOR EACH ROW
BEGIN
DECLARE SIM_CCode_Count INTEGER;
DECLARE NET_CCode_Count INTEGER;

SELECT Count(*) into SIM_CCode_Count FROM Country_Main where CountryCode=NEW.SimCntISO;

IF SIM_CCode_Count=0 THEN
INSERT INTO Country_Main(CountryCode,CountryName) Values(NEW.SIMCntISO,"Unknown");
END IF;

If (NEW.SimCntISO<>NEW.NetCntISO) then
SELECT Count(*) into NET_CCode_Count FROM Country_Main
where CountryCode=NEW.NetCntISO;

IF NET_CCode_Count=0 THEN
INSERT INTO Country_Main(CountryCode,CountryName) Values(NEW.NETCntISO,"Unknown");
END IF;


End IF;
END;

【讨论】:

感谢您的快速回复..但仍然显示“#1064 - 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在 ' 附近使用的正确语法' 在第 3 行“ hmm.. 尝试在 phpadmin 的 SQL 选项卡的分隔符文本框中给出 // 以及上面的代码【参考方案2】:

你必须在触发语句之前声明一个mysql-statement分隔符:

DELIMITER |

CREATE TRIGGER ...
    (your code)
END|

DELIMITER ;

否则 MySQL 会将此语句中的 ; 解释为语句提交并立即执行代码。将分隔符更改为不同的字符后,您可以安全地在触发器声明中使用分号。

请看这里:http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

【讨论】:

以上是关于phpmyAdmin 中的 MySQL 触发器错误的主要内容,如果未能解决你的问题,请参考以下文章

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

更新前的 MySQL 使用 PhpMyAdmin 触发插入语法错误

MySQL中的触发器语句错误

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

phpMyAdmin中的MySQL触发器[关闭]

在 phpmyadmin 中添加触发器