首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL NULL 值完全指南:與空字符串的本質區別、索引影響與聚合行為

     編輯:MySQL 綜合教學

核心誤區:NULL ≠ 空字符串

INSERT INTO my_table (phone) VALUES (NULL);   -- 電話號碼未知
INSERT INTO my_table (phone) VALUES ('');     -- 確定沒有電話

前者語義為「值不存在/未知」,後者為「值存在但為空」。二者在業務邏輯、統計分析中含義截然不同。

NULL 判斷與處理函數

操作正確語法錯誤示例
判斷為 NULLWHERE phone IS NULLWHERE phone = NULL(永遠為 FALSE)
判斷非 NULLWHERE phone IS NOT NULLWHERE phone != NULL
轉換為指定值IFNULL(phone, '未填') / COALESCE(phone, '未填')

NULL 在各類運算中的傳播規則

  • 算術/字符串運算:1 + NULL = NULL、CONCAT('A', NULL) = NULL
  • 比較運算:NULL = NULL 為 NULL(非 TRUE),NULL < 10 為 NULL
  • 邏輯運算:TRUE AND NULL = NULL、FALSE OR NULL = NULL

特殊場景行為

索引與存儲引擎

  • MyISAM、InnoDB、MEMORY 允許 NULL 列建立索引
  • 其他引擎可能要求 NOT NULL

數據導入

  • LOAD DATA INFILE:缺失列默認寫入 '',需在數據文件用 \N 表示 NULL

排序與分組

  • ORDER BY col ASC:NULL 排在最前;DESC 排在最後
  • GROUP BY、DISTINCT:所有 NULL 視為同一組

聚合函數

SELECT COUNT(*), COUNT(age) FROM person;
-- COUNT(*) 計算總行數
-- COUNT(age) 忽略 NULL,僅統計非空值

隱式轉換陷阱

  • TIMESTAMP 列插入 NULL → 自動填充當前時間
  • AUTO_INCREMENT 整數列插入 NULL → 自動填充下一序號

良好習慣:業務明確「無值」語義時用 NULL,配合 NOT NULL 約束減少歧義;統計查詢優先用 COUNT(*) 而非 COUNT(col)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved