2

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

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

看到这确实发生了,我假设事实上无论是 SQL 标准、MySQL 本身还是 SQLYog,它都支持执行至少一些注释的 SQL 代码。

这导致我搜索规范文档,其中列出了有关在运行 SQL 脚本时执行某些注释代码块这一事实的详细信息。然而,整整一小时的搜索(特别是寻找官方规范,其次是搜索 SQL、MySQL 或 SQLYog 的任何此类文档)实际上只显示了一个链接,该链接甚至提到了以下事实: SQL 脚本中的代码实际上是被执行的。这是:执行注释的 SQL 行的参考链接(包括一些答案)。

我知道我可能在这里遗漏了明显的内容,但我无法找到此规范。

有人可以确认,如果是,请提供参考,说明(并描述)将执行的 SQL 的正式文档,即使/* */语句周围有“”语法(无论是 SQL、MySQL 还是 SQLYog) ? 谢谢。

4

1 回答 1

4

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

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

/*! MySQL-specific code */ 

在这种情况下,MySQL 服务器解析和执行注释中的代码,就像任何其他 SQL 语句一样,但其他 SQL 服务器将忽略扩展。 

...

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

在存储过程的情况下,整个声明被包装,所以如果你试图在一个太旧的 MySQL 服务器版本上恢复转储文件,它根本不支持存储过程,过程定义将被服务器忽略而不是导致整个还原操作失败。

于 2014-09-03T12:12:07.847 回答