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

MySQL、SQL Server、Oracle 唯一索引對 NULL 值處理差異

     編輯:MySQL 綜合教學

MySQL、SQL Server、Oracle 唯一索引對 NULL 值處理差異

業務需在 SQL Server 建唯一索引,發現不允許多個 NULL,報錯 重復的鍵值為 (<NULL>)。而 MySQL InnoDB 允許多 NULL,Oracle 亦同。

測試對比

數據庫唯一索引允許多 NULL主鍵允許 NULL
MySQL (InnoDB)✅ 是❌ 否
Oracle✅ 是❌ 否
SQL Server❌ 否(視為重複)❌ 否

理論依據

SQL 標準:NULL ≠ NULL,比較結果為 UNKNOWN。因此多 NULL 不違反唯一約束,MySQL/Oracle 符合邏輯自洽。SQL Server 將 NULL 視為相等值,屬於實現差異。

實踐建議

  • 跨庫遷移時注意唯一索引語義差異
  • SQL Server 若需允許多 NULL,可用過濾索引:CREATE UNIQUE INDEX idx ON tbl(col) WHERE col IS NOT NULL;
  • 主鍵在所有主流數據庫均不允許 NULL

參考:Oracle 唯一約束中 NULL 的處理

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