在网上阅读了很多关于使用分隔符存储过程和触发器等的信息后,我感到很困惑。
根据我的理解,触发器块应该按照分隔符编写:
DROP TRIGGER IF EXISTS innovationevents.Task9Trigger1;
DELIMITER //
CREATE TRIGGER innovationevents.Task9Trigger1
BEFORE INSERT ON innovationevents.tblattendees
FOR EACH ROW
BEGIN
INSERT INTO innovationevents.tblregistration
(RegistrationID, AttendeeID, EventID, RegistrationDate, RegistrationPaid)
VALUES (40, new.AttendeeID, 3, CURDATE(), 0);
END //
现在问题是我在phpMyadmin中收到错误消息,但代码仍在运行。我想也许这是错的?或者有没有更复杂的解释为什么我的代码是错的?真的让我一直看到这个错误:P
答案 0 :(得分:1)
DELIMITER
指令不属于MySQL数据库,而是属于mysql
命令行客户端。
通常,mysql
将分号(;
)识别为输入结束标记,这会导致它将命令缓冲区的当前内容传输到数据库以供执行。使用 DELIMITER
指令允许您输入复合命令(例如,作为CREATE PROCEDURE
的主体),组件简单命令以分号结束,而不会触发过早结束-of-输入。
MySQL Workbench还需要使用 DELIMITER
指令,但其他客户端则不需要,包括(我记得)phpMyAdmin。您可以轻松地通过实验验证。