在浏览由 SQLYog 程序为 MySQL 5.6.16 数据库生成的 SQL 转储时,我注意到每个存储过程CREATE
语句被注释字符包围(/* */
)。但是,存储过程是在执行 SQL 脚本时创建的。
我很惊讶地看到围绕存储过程的评论CREATE
语句,然后查看这些被注释的语句实际上被执行了。
看到这种情况确实发生了,我认为实际上 SQL 标准、MySQL 本身或者具体的 SQLYog 都记录了它支持至少一些带注释的 SQL 代码的执行。
这导致我搜索规范文档,其中列出了有关在运行 SQL 脚本时执行一些注释代码块这一事实的详细信息。然而,整整一个小时的搜索(特别是寻找官方规范,但其次搜索 SQL、MySQL 或 SQLYog 的任何此类文档)实际上只显示了一个链接,甚至使参考事实上,SQL 脚本中的注释代码行实际上已被执行。这里是:链接到执行 SQL 注释行的参考 https://stackoverflow.com/questions/1916392/how-can-i-get-rid-of-these-comments-in-a-mysql-dump(包括一些答案)。
我知道我可能在这里遗漏了明显的内容,但我无法找到这方面的规范。
有人可以确认一下吗?如果是的话,请提供参考,正式文档说明(并描述)将执行的 SQL,即使 '/* */
' 语句周围的语法(无论是 SQL、MySQL 还是 SQLYog)?谢谢。
它位于手册的“注释语法”下。
http://dev.mysql.com/doc/refman/5.6/en/comments.html http://dev.mysql.com/doc/refman/5.6/en/comments.html
/*! MySQL-specific code */
在这种情况下,MySQL 服务器会像解析任何其他 SQL 语句一样解析并执行注释中的代码,但其他 SQL 服务器将忽略扩展名。
...
如果您在“!”后添加版本号字符,仅当 MySQL 版本大于或等于指定版本号时才执行注释内的语法。
对于存储过程,整个声明都被包装起来,因此,如果您尝试在太旧的 MySQL 服务器版本上恢复转储文件,而该版本根本不支持存储过程,则过程定义将被服务器忽略而不是导致整个恢复操作失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)