在浏览由程序SQLYog为MySQL 5.6.6数据库生成的SQL转储时,我注意到每个存储过程CREATE
语句都被注释字符(/* */
)包围。但是,存储过程是在执行SQL脚本时创建的。
看到存储过程CREATE
语句周围的注释,以及这些注释语句实际上被执行,我都感到很惊讶。
看到这种情况确实发生了,我假设事实上,无论是SQL标准,MySQL本身,还是SQLYog,都证明它支持执行至少一些有注释的SQL代码。
这让我搜索了规范文档,其中详细列出了一些注释代码块在运行SQL脚本时执行的事实。然而,经过整整一个小时的搜索(特别是寻找官方规范,但其次是搜索SQL、MySQL或SQLYog的任何此类文档),实际上只发现了一个链接,甚至让引用SQL脚本中的注释行实际上是执行的。这里是:链接到执行SQL注释行的参考(包括一些答案)。
我知道我可能错过了这里显而易见的内容,但我还没能找到它的规范。
请有人确认,如果是,请提供参考,说明(和描述)将执行的SQL的正式文档,即使"/* */
"语法围绕语句/s(无论是SQL、MySQL还是SQLYog)?谢谢
它在手册中的"注释语法"下
http://dev.mysql.com/doc/refman/5.6/en/comments.html
/*! MySQL-specific code */
在这种情况下,MySQL Server会像解析任何其他SQL语句一样解析并执行注释中的代码,但其他SQL服务器会忽略扩展。
如果在"!"字符后添加版本号,则只有当MySQL版本大于或等于指定的版本号时,才会执行注释中的语法。
在存储过程的情况下,整个声明被包装,因此,如果您试图在MySQL服务器的旧版本上恢复转储文件,而该版本根本不支持存储过程,则服务器将忽略过程定义,而不会导致整个恢复操作失败。