11.7 註解

MySQL 伺服器支援三種註解樣式

  • # 字元到該行結尾。

  • --  序列到該行結尾。在 MySQL 中,--  (雙破折號) 註解樣式要求第二個破折號後至少跟著一個空白或控制字元 (例如空格、Tab、換行符號等等)。此語法與標準 SQL 註解語法略有不同,如章節 1.7.2.4,「'--' 作為註解的開頭」中所述。

  • /* 序列到後面的 */ 序列,如 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 伺服器支援某些 C 樣式註解的變體。這些變體讓您可以使用以下形式的註解來編寫包含 MySQL 擴充功能的程式碼,但仍然具有可移植性

/*! MySQL-specific code */

在這種情況下,MySQL 伺服器會剖析並執行註解內的程式碼,如同任何其他 SQL 陳述式一樣,但其他 SQL 伺服器應忽略擴充功能。例如,MySQL 伺服器會辨識以下陳述式中的 STRAIGHT_JOIN 關鍵字,但其他伺服器則不會

SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...

如果您在 ! 字元後加上版本號碼,則只有在 MySQL 版本大於或等於指定的版本號碼時,才會執行註解內的語法。只有 MySQL 5.1.10 或更高版本的伺服器才會執行以下註解中的 KEY_BLOCK_SIZE 關鍵字

CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;

版本號碼使用 Mmmrr 格式,其中 M 為主要版本,mm 為兩位數的次要版本,而 rr 為兩位數的發行版本號碼。例如:在僅由 MySQL 伺服器 9.0.0 或更新版本執行的陳述式中,在註解中使用 90000

在 MySQL 9.0 中,版本號碼也可以選擇性地由 MMmmrr 格式的六位數組成,其中 MM 為兩位數的主要版本,而 mmrr 分別為兩位數的次要版本和兩位數的發行版本號碼。

版本號碼後面應至少跟著一個空白字元 (或註解結尾)。如果註解以六位數開頭,後面跟著空白,則會將其解譯為六位數的版本號碼。否則,如果以至少五位數開頭,則會將這些數字解譯為五位數的版本號碼 (此目的將忽略任何剩餘字元);如果以少於五位數開頭,則會將註解視為一般 MySQL 註解處理。

剛才描述的註解語法適用於 mysqld 伺服器剖析 SQL 陳述式的方式。mysql 用戶端程式也會在將陳述式傳送到伺服器之前,先對其進行一些剖析。(這樣做是為了判斷多個陳述式輸入行中的陳述式界限。) 如需伺服器與 mysql 用戶端剖析器之間差異的相關資訊,請參閱章節 6.5.1.6,「mysql 用戶端秘訣」

格式為 /*!12345 ... */ 的註解不會儲存在伺服器上。如果使用此格式來註解儲存的程式,則註解不會保留在程式主體中。

C 樣式註解語法的另一個變體用於指定最佳化工具提示。提示註解在 /* 註解開頭序列後包含一個 + 字元。範例

SELECT /*+ BKA(t1) */ FROM ... ;

如需詳細資訊,請參閱章節 10.9.3,「最佳化工具提示」

不支援在多行 /* ... */ 註解中使用簡短格式的 mysql 命令,例如 \C。簡短格式命令可在單行 /*! ... */ 版本註解中使用,/*+ ... */ 最佳化工具提示註解也可以,它們會儲存在物件定義中。如果擔心最佳化工具提示註解可能會儲存在物件定義中,導致使用 mysql 重新載入傾印檔案時會執行此類命令,請使用 mysql--binary-mode 選項,或使用 mysql 以外的重新載入用戶端。