admin

实际上,在相关规范的何处记录了SQL脚本中的某些注释应作为有效的SQL(由MySQL)执行?

sql

浏览由程序SQLYog为MySQL 5.6.16数据库生成的SQL转储时,我注意到每个存储过程CREATE语句都被注释字符(/* */)包围。但是,存储过程是在执行SQL脚本时创建的。

看到存储过程CREATE语句周围的注释,然后看到这些注释语句实际上已执行,我感到很惊讶。

看到确实发生了这种情况,我以为实际上是SQL标准,MySQL本身或SQLYog专门说明了它支持至少执行一些带注释的SQL代码的文档。

这使我搜索规范文档,其中列出了有关在运行SQL脚本时执行一些注释的代码块这一事实的详细信息。但是,整整一个小时的搜索(尤其是查找正式规范,然后再搜索SQL,MySQL或SQLYog的任何此类文档)实际上仅显示了一个链接,该链接甚至
引用
了以下事实:实际上,SQL脚本中的代码已执行。这是:引用的链接,用于执行SQL的注释行(包括一些答案)。

我知道我很可能在这里找不到明显的地方,但是我无法为此找到规格。

有人可以确认,如果可以的话,请提供陈述(并描述)将要执行的SQL的正式文档,即使“ /* */”语法环绕语句(无论是SQL,MySQL还是SQLYog)
?谢谢。


阅读 140

收藏
2021-06-07

共1个答案

admin

在手册的“注释语法”下。

http://dev.mysql.com/doc/refman/5.6/en/comments.html

/*! MySQL-specific code */

在这种情况下,MySQL Server像其他任何SQL语句一样,解析并执行注释中的代码,但是其他SQL Server将忽略这些扩展。

如果在“ |!”字符之后添加版本号,则仅当MySQL版本大于或等于指定的版本号时,才执行注释中的语法。

对于存储过程,整个声明都经过包装,因此,如果您尝试在旧版本的MySQL服务器上还原转储文件,那么该版本根本不支持存储过程,则服务器将忽略过程定义。而不是导致整个还原操作失败。

2021-06-07