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 版本大於或等於指定的版本號碼時,才會執行註解內的語法。以下註解中的 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 為兩位數主要版本,而 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 以外的重新載入用戶端。