MySQL触发器创建执行时没有语法错误,但没有创建触发器,其他执行失败
在运行查询以创建触发器时,我当前没有收到错误,但在运行它之后,我无法执行另一个查询。就好像我没有关闭一些封装:MySQL触发器创建执行时没有语法错误,但没有创建触发器,其他执行失败,mysql,triggers,mysql-5.6,Mysql,Triggers,Mysql 5.6,在运行查询以创建触发器时,我当前没有收到错误,但在运行它之后,我无法执行另一个查询。就好像我没有关闭一些封装: 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&g
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中引导出来。当我重新登录时,我的触发器不存在,我找不到任何错误。您的代码中有一些错误
每一个代码行都必须以分号结尾,并且您有很多代码行的结尾
DELIMITER //
CREATE TRIGGER trigger_name BEFORE DELETE ON existingtable
for each row
begin
INSERT INTO new_delete_table (`column`) values
(old.column) ;
end//
DELIMITER;
分隔符
命令是特殊的。命令后面直到行尾的所有字符都被解释为要用作新分隔符的字符串
不能将代码放在同一行上,因为所有这些代码都将成为新分隔符的一部分。这就是为什么没有出现错误,但没有执行CREATETRIGGER语句。它只是很长的分隔符字符串的一部分
分隔符
必须将行尾解释为命令的结尾的原因是它不接受
作为分隔符
命令的结尾。如果是这样,就无法将分隔符重置回代码>
您在评论中询问是否需要换行符。除了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语句末尾使用//
作为分隔符。)我已经尝试将其作为//delimiter第一次结束后的code>代码>。对吗?行为似乎是一样的。发布的代码在语法上是不正确的;结尾错了-你转录正确了吗?否第一个端点不应该在那里,插入应该终止,开始应该结束(带有一个end//),分隔符关键字和分隔符之间应该有一个空格,@P.Salmon是的,这是我的实际代码,列/表名除外。这执行相同的操作。每个语句是否需要实际的新行?我将从windows转到linux,因此我正在修改语法以避免新行错误。此代码未执行。它的行为与原来的相同。检查答案是否有误,请再试一次Hanks,这很有效。第一个结尾
也必须删除。