萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 中 NULL 與空字串的區別及刪除實戰

搞懂 NULL vs '',精準清理「空」數據

MySQL 裡 NULL(無值)與 ''(空字串)是兩碼事,混淆會導致查詢條件失效、統計偏差。本文深度解析差異,並給出精準刪除/查詢模板。

核心區別對照表

特性NULL空字串 ''
含義值不存在、未知值存在、長度為 0
佔用空間不佔用(視引擎而定)佔用 1 字節(含結束符)
運算結果任何運算 = NULL正常字串運算
判斷語法IS NULL / IS NOT NULL= '' / != ''
聚合函數COUNT(col) 不計入COUNT(col) 計入
唯一索引允許多個 NULL視為相同值,僅允許一個

經典誤區

-- ❌ 錯誤:NULL 不能用 = 比較
SELECT * FROM t WHERE col = NULL;  -- 永遠返回空集

-- ✅ 正確
SELECT * FROM t WHERE col IS NULL;
SELECT * FROM t WHERE col = '';

刪除模板

  • 刪除 NULL:DELETE FROM t WHERE col IS NULL;
  • 刪除空字串:DELETE FROM t WHERE col = '';
  • 同時刪除:DELETE FROM t WHERE col IS NULL OR col = '';

查詢與統計技巧

-- 將 NULL 視為 0 參與運算
SELECT COALESCE(score, 0) FROM exam;

-- 統計非空、非空字串行數
SELECT COUNT(*) FROM t WHERE col IS NOT NULL AND col != '';

-- 分組去重時區分 NULL 與 ''
SELECT col, COUNT(*) FROM t GROUP BY col;

左/右連接產生 NULL 的本質

左連 A LEFT JOIN B 時,B 表無匹配行 → B 欄位填 NULL;右連同理。這是關係代數外連接語義決定的,非「缺失」。

建表約束建議

  • 業務必填欄位:col VARCHAR(50) NOT NULL DEFAULT ''(避免 NULL 麻煩)
  • 可選欄位:col VARCHAR(50) DEFAULT NULL,應用層統一寫入 NULL 而非 ''
  • 唯一索引欄位:慎用 NULL,因多 NULL 不違反唯一約束,易臟數據。

總結口訣

NULL 是「無」,空串是「有但空」;
判斷用 IS,比較用 =;
刪除分兩行,統計要分清;
建表設默認,業務少踩坑。

copyright © 萬盛學電腦網 all rights reserved