Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL触发器创建执行时没有语法错误,但没有创建触发器,其他执行失败_Mysql_Triggers_Mysql 5.6 - Fatal编程技术网

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,这很有效。第一个
结尾
也必须删除。