MySQL 8.4 發行說明
標準 SQL 使用 C 語法 /* 這是一個註解 */
作為註解,而 MySQL 伺服器也支援此語法。MySQL 也支援此語法的擴充,使特定於 MySQL 的 SQL 能夠嵌入在註解中;請參閱 第 11.7 節,「註解」。
MySQL 伺服器也使用 #
作為註解的開頭字元。這是非標準的。
標準 SQL 也使用 「--
」 作為註解的開頭序列。MySQL 伺服器支援 --
註解樣式的變體;--
開頭註解序列會被接受,但後面必須跟著一個空白字元,例如空格或換行符號。空格的目的是防止在生成 SQL 查詢時發生問題,這些查詢使用以下結構,該結構會更新餘額以反映費用
UPDATE account SET balance=balance-charge
WHERE account_id=user_id
考慮當 charge
具有負值時會發生什麼情況,例如 -1
,當金額計入帳戶時可能會發生這種情況。在這種情況下,生成的語句如下所示
UPDATE account SET balance=balance--1
WHERE account_id=5752;
balance--1
是有效的標準 SQL,但 --
會被解釋為註解的開頭,並且表達式的一部分會被丟棄。結果是一個語句,其含義與預期的完全不同
UPDATE account SET balance=balance
WHERE account_id=5752;
此語句根本不會產生任何數值變化。為了防止這種情況發生,MySQL 要求在 --
後面加上一個空白字元,以便在 MySQL 伺服器中將其識別為開頭註解序列,因此像 balance--1
這樣的表達式始終可以安全使用。