MySQL 9.0 發行說明
標準 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
之類的表達式。