MySQL 触发器创建执行无语法错误但未创建触发器,其他执行失败

MySQL Trigger Creation Executes Without Syntax Error but no trigger created, other executions fail

当 运行 创建触发器的查询时,我目前没有收到错误,但在 运行 它之后我无法执行另一个查询。好像我没有关闭一些封装:

DELIMITER // CREATE TRIGGER trigger_name BEFORE DELETE ON existingtable for each row begin INSERT INTO new_delete_table (column) values(old.column) end; END DELIMITER;

我正在使用命令行并开始于:

mysql>

我执行并收到一个新的:

mysql>

这是查询成功时的正常行为。如果我随后尝试查看我的触发器,我将陷入无限循环,等待我输入一些字符来关闭某些东西。

mysql> show triggers;
    ->

我可以使用 ctrl + c 退出该功能,但这也会让我退出 MySQL。当我重新登录时,我的触发器不存在,我找不到任何错误。

你的代码有一些错误

每个代码行都必须以分号结尾,而且你有一个 END 到很多

DELIMITER // 
CREATE TRIGGER trigger_name BEFORE DELETE ON existingtable 
for each row 
begin 
    INSERT INTO new_delete_table (`column`) values
    (old.column) ;
end// 
DELIMITER;

DELIMITER命令比较特殊。命令之后直到行尾的所有字符都被解释为要用作新分隔符的字符串。

您不能将代码放在同一行,因为所有这些代码都将成为新分隔符的一部分。这就是为什么没有错误,但没有执行 CREATE TRIGGER 语句的原因。它只是成为一个很长的分隔符字符串的一部分。

DELIMITER 必须将 end-of-line 解释为命令结束的原因是它不接受 ; 作为 DELIMITER 命令的结束.如果是这样,将无法将分隔符重置回 ;.

您在评论中询问是否需要换行。除了 DELIMITER 命令后的换行符外,您不需要换行符。你可以这样做:

DELIMITER // 
CREATE TRIGGER trigger_name BEFORE DELETE ON existingtable FOR EACH ROW BEGIN INSERT INTO new_delete_table (column) VALUES(old.column) END //
DELIMITER ;

(记得在 CREATE TRIGGER 语句的末尾使用 // 作为分隔符。)