MySQL 中的唯一約束和空值
在資料庫設計中,唯一約束用於確保某個列或一組列在資料庫設計中表僅包含不同的值。但是,有時需要在具有唯一約束的列中允許空值。在 MySQL 中,這確實是可能的。
MySQL 允許多行在具有唯一約束的欄位中具有空值。這意味著列中可能存在重複的空值而不違反約束。
為了說明此行為,請考慮以下範例:
CREATE TABLE table1 (x INT NULL UNIQUE); INSERT table1 VALUES (1); INSERT table1 VALUES (1); -- Duplicate entry '1' for key 'x' INSERT table1 VALUES (NULL); INSERT table1 VALUES (NULL); SELECT * FROM table1;
當您執行上述語句時, MySQL 會在表中插入三行。第一個插入語句成功,因為「x」的值是唯一的 (1)。第二個插入語句失敗,因為「x」的值 (1) 已存在並且違反了唯一限制。但是,第三條和第四條插入語句成功,因為 'x' 的值為 null,這是 MySQL 中唯一限制下允許的。
SELECT 語句的結果將顯示以下行:
x NULL NULL 1
需要注意的是,此行為是特定於 MySQL。其他資料庫(例如 SQL Server 2005 或更早版本)不允許在具有唯一約束的欄位中存在多個空值。在這種情況下,它們通常只允許單一空值。
以上是MySQL 如何處理唯一限制和空值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!