Phpmyadmin 不接受 MySQL 触发器

Posted

技术标签:

【中文标题】Phpmyadmin 不接受 MySQL 触发器【英文标题】:Phpmyadmin doesn't accept MySQL trigger 【发布时间】:2015-10-16 15:38:25 【问题描述】:

我正在尝试使用 phpmyadmin 创建触发器,但我的触发器不断被拒绝。 假设有这些表: 新闻(代码等) 学生(代码等) 老师(代码等) 课程(代码等) 新闻列表(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 Inbox(Sender, Receiver, Object, Content, Date) VALUES (' at line 12

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

【问题讨论】:

不应该是 WHILE ... DO .... END WHILE,而不是花括号? 【参考方案1】:

抱歉,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; //

【讨论】:

【参考方案2】:

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

尝试将其更改为:

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

【讨论】:

以上是关于Phpmyadmin 不接受 MySQL 触发器的主要内容,如果未能解决你的问题,请参考以下文章

phpmyAdmin 中的 MySQL 触发器错误

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

如果在 phpmyadmin 触发器中不工作

使用 phpmyadmin 的 MySQL 触发器

phpmyadmin 中的 MYSQL 触发器语法问题

无法在 PHPMYADMIN 上创建此 MYSQL 触发器