11.7 注释
MySQL Server 支持三个注释风格:
-
从一个
#
字符到行尾。 -
从一个
--
序列到行尾。在 MySQL 中,--
(双减号)注释风格要求第二个减号后面至少有一个空白或控制字符(如空格、制表符、换行等)。这与标准 SQL 注释语法略有不同,如第 1.7.2.4 节,“‘--’ as the Start of a Comment”中讨论过。 -
从一个
/*
序列到以下的*/
序列,类似 C 语言。这个语法使得注释可以跨越多行,因为开始和结束序列不需要在同一行。
以下示例演示了所有三个注释风格:
mysql> SELECT 1+1; # This comment continues to the end of line
mysql> SELECT 1+1; -- This comment continues to the end of line
mysql> SELECT 1 /* this is an in-line comment */ + 1;
mysql> SELECT 1+
/*
this is a
multiple-line comment
*/
1;
嵌套注释不支持,且已弃用;未来 MySQL 版本中可能会删除(某些情况下可能允许,但通常不允许,用户应该避免)。
MySQL Server 支持某些 C 风格注释。这些使得你可以编写包含 MySQL 扩展的代码,但是仍然是可移植的,使用以下形式:
/*! MySQL-specific code */
在这种情况下,MySQL Server 解析和执行注释中的代码,就像任何其他 SQL 语句一样,但其他 SQL 服务器应该忽略扩展。例如,MySQL Server 认识以下语句中的STRAIGHT_JOIN
关键字,但其他服务器不应该:
SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...
如果在注释中添加版本号,后面的语法只在MySQL版本大于或等于指定版本号时执行。以下注释中的KEY_BLOCK_SIZE
关键字,只在MySQL 5.1.10 或更高版本的服务器上执行:
CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;
版本号使用格式Mmmrr
M
是主要版本,mm
是二位次要版本,rr
是二位发布号。例如,在只在MySQL 8.4.0 或更高版本的服务器上执行语句,使用80400
在注释中。
在 MySQL 8.4 中,版本号也可以以MMmmrr
格式组成,其中MM
是二位主要版本,mm
和rr
分别是二位次要版本和二位发布号。
版本号后面应该跟至少一个空白字符(或注释结束)。如果注释以六个数字开头,紧接着空白,这被解释为六位版本号;否则,如果以五个数字开头,这些数字被解释为五位版本号(忽略剩余字符),如果以少于五个数字开头,注释被处理为正常的 MySQL 注释。
前面描述的注释语法适用于 mysqld 服务器解析 SQL 语句。mysql 客户端程序也对语句进行部分解析,然后将其发送到服务器中。(它这样做是为了在多条语句输入行中确定语句边界。)关于服务器和 mysql 客户端解析器的差异,见第 6.5.1.6 节,“mysql 客户端提示”。
格式为 /*!12345 ... */
的注释不存储在服务器上。如果使用该格式注释存储程序,注释将不会保留在程序体中。
C 风格注释语法的另一种变体用于指定优化器提示。提示注释包括一个 +
字符,紧跟在 /*
注释开头序列后。示例:
SELECT /*+ BKA(t1) */ FROM ... ;
更多信息,请见第 10.9.3 节,“优化器提示”。
在多行注释中使用短形式mysql命令,如\C
,不受支持。短形式命令在单行注释/*! ... */
版本注释中工作,也可以在对象定义中存储/*+ ... */
优化器提示注释。如果担心优化器提示注释可能被存储在对象定义中,以便在重新加载时使用mysql命令,或者使用其他 reload 客户端,而不是mysql。