首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL NULL 值完整處理指南:概念釐清、比較陷阱、索引、載入、排序、彙總函數特殊行為

     編輯:MySQL 資料庫相關知識

核心概念區別

  • NULL:代表「未知、不存在」
  • '' (空字串):代表「已知為空」
INSERT INTO t(phone) VALUES (NULL);    -- 電話號碼未知
INSERT INTO t(phone) VALUES ('');      -- 確定沒有電話

比較運算陷阱

  • NULL 與任何值比較 (含 NULL) 永遠不為 TRUE
  • 包含 NULL 的運算式結果為 NULL (除特定函數文檔另有規定)
  • 錯誤寫法:WHERE phone = NULL → 永遠回傳 0 筆
  • 正確寫法:WHERE phone IS NULL / WHERE phone IS NOT NULL

NULL 處理函數與操作符

  • IS NULL / IS NOT NULL
  • IFNULL(expr1, expr2):expr1 為 NULL 回傳 expr2
  • COALESCE(val1, val2, ...):回傳第一個非 NULL 值

特殊場景行為

場景行為
索引MyISAM/InnoDB/BDB/MEMORY 允許 NULL 欄位建索引;其他引擎需 NOT NULL
LOAD DATA INFILE空值/缺失欄位 → 空字串;需 NULL 請在資料檔用 \N
DISTINCT/GROUP BY/ORDER BY所有 NULL 視為等同
ORDER BY預設 NULL 排最前;DESC 時排最後
彙總函數 COUNT/MIN/SUM忽略 NULL 值
COUNT(*)計算列數,不忽略 NULL
TIMESTAMP 欄位插入 NULL自動填入當前日期時間
AUTO_INCREMENT 欄位插入 NULL自動填入下一序號

實務建議

  • 明確區分業務語義下的「未知」vs「空值」,選擇 NULL 或 NOT NULL + DEFAULT ''
  • 查詢條件嚴禁使用 = NULL,務必用 IS NULL
  • 彙總統計注意 COUNT(col) vs COUNT(*) 差異
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved