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

标签 mysql sql comments sqlyog

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

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

看到确实发生了这种情况,我假设实际上是 SQL 标准、MySQL 本身或具体的 SQLYog 记录了它至少支持执行一些带注释的 SQL 代码。

这促使我搜索规范文档,其中列出了有关在运行 SQL 脚本时执行一些注释代码块这一事实的详细信息。然而,一整小时的搜索(特别是寻找官方规范,但随后搜索 SQL、MySQL 或 SQLYog 的任何此类文档)实际上只显示了一个链接,甚至可以作为 reference事实上,SQL 脚本中注释的代码行实际上已被执行。这是:link to reference that commented lines of SQL are executed (包括一些答案)。

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

有人可以确认,如果可以,请提供引用,说明(和描述)将执行的 SQL 的正式文档,即使 '/* */' 语法包含语句/s(无论是 SQL、MySQL 还是 SQLYog)?谢谢。

最佳答案

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

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

/*! MySQL-specific code */ 

In this case, MySQL Server parses and executes the code within the comment as it would any other SQL statement, but other SQL servers will ignore the extensions. 

...

If you add a version number after the “!” character, the syntax within the comment is executed only if the MySQL version is greater than or equal to the specified version number.

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

关于mysql - 在相关规范的何处记录了 SQL 脚本中的某些注释实际上将作为有效 SQL(由 MySQL)执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25614919/

相关文章:

mysql - 编写 SQL 查询来查找接近 min() 值的行

php - 一个很好的教程,书籍或练习,供新手学习SQL命令以在php中创建论坛(或其他方法)?

sql - 使用 SQL 用另外 3 个字符更新字符串的前 7 个字符,抛出 "Error 19 - UNIQUE constraint failed: MGOFile.File."

emacs - 根据文件扩展名设置emacs注释样式

java - %{ ... %} 评论的正则表达式

mysql - 使用参数作为查询的 SQL INSERT

mysql - Docker MySQL Github Actions 连接被拒绝

两个表中的mysql查询帮助

mysql - 使用 WHERE IN 子句的 SQL 更新查询可能包含大量不匹配的行 ID 是否会成为性能问题?

c# - 仅针对发布版本从项目文件中删除注释