在浏览程序SQLYog为MySQL 5.6.16数据库生成的SQLYog时,我注意到每个存储过程CREATE语句都被注释字符(/* */)包围。但是,存储过程是在执行SQL脚本时创建的。
我惊讶地看到围绕存储过程CREATE语句的注释,然后看到这些注释语句实际上被执行。
考虑到确实发生了这种情况,我假设实际上无论是SQL标准、MySQL本身,还是SQLYog,都是它支持执行至少一些注释性SQL代码的文档。
这导致我搜索规范文档,列出了在运行SQL脚本时执行一些注释代码块的详细信息。然而,整整一个小时的搜索(特别是查找官方规范,但第二次搜索SQL、MySQL或SQLYog的任何此类文档)实际上只显示了一个链接,该链接甚至引用了一个事实,即实际上执行了SQL脚本中的注释代码行。这是:link to reference that commented lines of SQL are executed (包括一些答案)。
我知道在这里我可能忽略了显而易见的内容,但是我还没有找到这方面的规范。
请有人确认,如果是,请提供引用,这些正式文档声明(并描述)将执行的SQL,即使'/* */‘语法围绕着语句/s(这是SQL、MySQL还是SQLYog)?谢谢。
发布于 2014-09-03 12:12:07
它在手册中,在“注释语法”下。
http://dev.mysql.com/doc/refman/5.6/en/comments.html
/*! MySQL-specific code */ 在本例中,MySQL服务器与其他任何SQL语句一样,在注释中解析和执行代码,但其他Server将忽略扩展。
..。
如果在“!”字符后面添加版本号,则只有当MySQL版本大于或等于指定版本号时,注释中的语法才会执行。
在存储过程的情况下,整个声明被包装起来,因此如果您试图在MySQL服务器的一个版本上恢复转储文件(该版本太老了,根本不支持存储过程),则服务器将忽略过程定义,而不是导致整个恢复操作失败。
https://stackoverflow.com/questions/25614919
复制相似问题