2017-01-30 172 views
0

我一直在尝试在数据库表(MySQL v 5.7)上创建一个简单的BEFORE INSERT触发器,但我一直收到一个含糊不清的“#1064 ...语法错误”消息,这无助于解决问题。MySQL 5.7创建触发语法错误?

这里的SQL:

CREATE OR REPLACE TRIGGER `CREATE_QUIZ_TRIG` BEFORE INSERT ON `quiz` 
FOR EACH ROW BEGIN 
    SET NEW.ACTIVE = UPPER(NEW.ACTIVE); 
    SET NEW.CREATED = NOW(); 
END 
/

所有我想要做的是强迫字段为大写,然后插入当前日期时间&成一个时间戳列。我是从以下文件:

https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html

,并认识到为多语句表达我在扳机的创立之初,但出现相同的“#1064”的错误,重新定义的分隔符。

这使得更令人困惑,因为当我使用phpmyadmin的界面创建相同的触发器时,它工作正常 - 但不会导出生成的SQL并尝试使用该触发器创建触发器!

感谢所有帮助

+0

但我不会导出生成的SQL并尝试使用它创建触发器! - 这是什么意思? –

+0

PhpMyAdmin允许您使用它的GUI输出用于创建表的SQL。使用此GUI创建表时,触发器已成功创建 - 所以我导出了它生成的SQL,并尝试使用该SQL而不是GUI创建表;这不起作用,我认为这是奇怪的。 原来,问题是PHPMyAdmin自动将触发器的默认分隔符设置为';',这就是为什么当我尝试创建触发器时由于SET后出现了分号而出现语法错误。命令 - 它认为那些是分隔符 –

回答

0

我没有意识到的是,在默认情况下,phpMyAdmin的增加了;定界符这是打破用来结束BEGIN END块内声明的;