表 tv_play,字段 genre 類型 VARCHAR。執行:
DELETE FROM tv_play WHERE genre = Science Fiction;
報錯:Unknown column 'Science' in 'where clause' 或語法錯誤。
MySQL 將無引號的 Science Fiction 解析為**兩個標識符**(列名或關鍵字),而非字符串字面值。空格導致解析器以為是 Science 列與 Fiction 關鍵字/列。
DELETE FROM tv_play WHERE genre = 'Science Fiction';
'Science\'s Best' 或雙引號模式 "Science's Best"(需 ANSI_QUOTES 模式關閉)。| 數據類型 | WHERE 條件寫法 | 示例 |
|---|---|---|
| 字符串 (CHAR/VARCHAR/TEXT) | 單引號包裹 | WHERE name = 'abc' |
| 日期/時間 (DATE/DATETIME) | 單引號包裹 | WHERE dt = '2023-01-01' |
| 數值 (INT/DECIMAL/FLOAT) | 直接寫數字 | WHERE id = 100 |
| NULL | IS NULL / IS NOT NULL | WHERE col IS NULL |
-- Java (PreparedStatement)
String sql = "DELETE FROM tv_play WHERE genre = ?";
pst.setString(1, "Science Fiction"); // 自動處理引號、轉義、注入防護
-- Python (MySQLdb)
cursor.execute("DELETE FROM tv_play WHERE genre = %s", ("Science Fiction",))
字符串、日期值在 SQL 中必須加單引號。genre = Science Fiction 缺引號導致語法解析錯誤。養成「值加引號、列加反引號」習慣,或直接用參數化查詢一勞永逸。