9.6 Comments 语法
MySQL Server 支持三种 Comments 样式:
-
从
#
字符到行尾。 -
从
--
序列到行尾。在 MySQL 中,--
(双破折号)Comments 样式要求第二个破折号后面必须至少有一个空格或控制字符(例如空格,制 table 符,换行符等)。此语法与第 1.8.2.4 节“'-'作为 Comments 的开始”中讨论的标准 SQLComments 语法略有不同。 -
与 C 编程语言一样,从
/*
序列到以下*/
序列。此语法使 Comments 可以扩展到多行,因为开始和结束序列不必在同一行上。
下面的示例演示了所有三种 Comments 样式:
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;
不支持嵌套 Comments。 (在某些情况下,可能允许嵌套 Comments,但通常不允许嵌套 Comments,用户应避免使用它们.)
MySQL Server 支持 C 样式 Comments 的某些变体。这些使您能够通过使用以下形式的 Comments 来编写包括 MySQL 扩展但仍可移植的代码:
/*! MySQL-specific code */
在这种情况下,MySQL 服务器将像其他任何 SQL 语句一样解析并执行 Comments 中的代码,但是其他 SQL Server 将忽略这些扩展。例如,MySQL 服务器在以下语句中识别出STRAIGHT_JOIN
关键字,而其他服务器则不能:
SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...
如果在!
字符后添加版本号,则仅当 MySQL 版本大于或等于指定的版本号时,才会执行 Comments 中的语法。以下 Comments 中的KEY_BLOCK_SIZE
关键字仅由 MySQL 5.1.10 或更高版本的服务器执行:
CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;
刚刚描述的 Comments 语法适用于mysqld服务器解析 SQL 语句的方式。 mysqlClient 端程序还会在将语句发送到服务器之前执行一些语句解析。 (这样做是为了确定多语句 Importing 行中的语句边界.)有关服务器和mysqlClient 端解析器之间的差异的信息,请参见第 4.5.1.6 节“ mysqlClient 端技巧”。
/*!12345 ... */
格式的 Comments 未存储在服务器上。如果此格式用于 Comments 存储的程序,则 Comments 不会保留在程序主体中。
C 样式 Comments 语法的另一种变体用于指定优化器提示。提示 Comments 在/*
Comment 打开 Sequences 之后包含+
字符。例:
SELECT /*+ BKA(t1) */ FROM ... ;
有关更多信息,请参见第 8.9.3 节“优化程序提示”。
不支持在多行/* ... */
Comments 中使用诸如\C
之类的短格式mysql命令。简短格式的命令确实可以在单行/*! ... */
版本 Comments 中工作,而/*+ ... */
Optimizer-hintComments 也是如此,这些 Comments 存储在对象定义中。如果担心优化程序提示 Comments 可能存储在对象定义中,以便在使用mysql
重新加载转储文件时将导致执行此类命令,请使用--binary-mode选项调用mysql或使用mysql以外的重载 Client 端。