Phpmyadmin不接受MySQL触发器

时间:2015-07-26 11:19:52

标签: mysql triggers phpmyadmin

我正在尝试使用Phpmyadmin创建一个触发器,但我的触发器一直被拒绝。
假设有这些表:
新闻(代码等)
学生(代码等)
老师(代码等)
课程(代码等)
NewsList(NewsCode,TeacherCode,CourseCode)
StudsCoursesList(StudentCode,CourseCode)
等等,但这些是我在这个触发器中使用的。

以下是代码:

DELIMITER //

CREATE TRIGGER newNews
AFTER INSERT
   ON News FOR EACH ROW

BEGIN
SET @news = (SELECT MAX(Code) FROM News);
SET @course = (SELECT CourseCode FROM NewsList WHERE NewsCode=@news);
SET @cod = (SELECT TeacherCode FROM NewsList WHERE NewsCode=@news);
SET @studs = (SELECT StudentCode FROM StudsCoursesList WHERE Course=@course);
SET @i = 0;
WHILE @i < COUNT(@studs)
{
    INSERT INTO Inbox(Sender, Receiver, Object, Content, Date) VALUES (@cod, @i, @studs[i], "", CURDATE());
    i++;
}
END; //

DELIMITER ;

Phpmyadmin显示此消息:

1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在'{

附近使用正确的语法

INSERT INTO收件箱(发件人,收件人,对象,内容,日期)价值('第12行

我不明白是什么问题。在指出Date可能会发生冲突之前,它只是用英语翻译,用我的语言我使用数据。

2 个答案:

答案 0 :(得分:2)

很抱歉,但是MySQL语法没有花括号而WHILE缺少DO

WHILE循环更改为

WHILE @i < COUNT(@studs) DO
    INSERT INTO Inbox(Sender, Receiver, Object, Content, Date) VALUES (@cod, @i, @studs[i], "", CURDATE());
    @i = @i + 1;
END WHILE; //

答案 1 :(得分:1)

您的错误消息表明它与WHILE语句有关。您正在使用卷曲括号,而这些不在SQL中使用。

尝试将其更改为:

WHILE @i < COUNT(@studs) DO INSERT ..... END WHILE