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
為兩位數主要版本,而 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 以外的重新載入用戶端。