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
為兩位數的主要版本,而 mm
和 rr
分別為兩位數的次要版本和兩位數的發行版本號碼。
版本號碼後面應至少跟著一個空白字元 (或註解結尾)。如果註解以六位數開頭,後面跟著空白,則會將其解譯為六位數的版本號碼。否則,如果以至少五位數開頭,則會將這些數字解譯為五位數的版本號碼 (此目的將忽略任何剩餘字元);如果以少於五位數開頭,則會將註解視為一般 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 以外的重新載入用戶端。