Câu trả lời:
Có, MySQL cho phép nhiều NULL trong một cột với một ràng buộc duy nhất.
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;
Kết quả:
x
NULL
NULL
1
Điều này không đúng với tất cả các cơ sở dữ liệu. Ví dụ, SQL Server 2005 trở lên chỉ cho phép một giá trị NULL duy nhất trong một cột có ràng buộc duy nhất.
WHERE column IS NOT NULL
dường như không làm tôi thất bại vì nó không được hỗ trợ trong phiên bản MySQL của tôi. Bất cứ ai biết nơi tôi có thể nhìn?
Từ các tài liệu :
"một chỉ mục UNIQUE cho phép nhiều giá trị NULL cho các cột có thể chứa NULL"
Điều này áp dụng cho tất cả các công cụ trừ BDB .
Tôi không chắc liệu ban đầu tác giả chỉ hỏi liệu điều này có cho phép các giá trị trùng lặp hay không nếu có một câu hỏi ngụ ý ở đây, "Làm thế nào để cho phép NULL
các giá trị trùng lặp trong khi sử dụng UNIQUE
?" Hoặc "Làm thế nào để chỉ cho phép một UNIQUE
NULL
giá trị?"
Câu hỏi đã được trả lời, vâng, bạn có thể có NULL
các giá trị trùng lặp trong khi sử dụng UNIQUE
chỉ mục.
Vì tôi vấp phải câu trả lời này trong khi tìm kiếm "cách cho phép một UNIQUE
NULL
giá trị". Đối với bất kỳ ai khác có thể vấp phải câu hỏi này trong khi làm tương tự, phần còn lại của câu trả lời của tôi là dành cho bạn ...
Trong MySQL, bạn không thể có một UNIQUE
NULL
giá trị, tuy nhiên bạn có thể có một UNIQUE
giá trị trống bằng cách chèn với giá trị của chuỗi rỗng.
Cảnh báo: Số và các loại khác ngoài chuỗi có thể mặc định là 0 hoặc giá trị mặc định khác.
UNIQUE
ràng buộc mà vì NOT NULL
ràng buộc. Tôi nghĩ rằng câu trả lời này không liên quan đến câu hỏi vì câu hỏi đặc biệt về hành vi của sự UNIQUE
ràng buộc.
Tránh các ràng buộc độc đáo nullable. Bạn luôn có thể đặt cột vào một bảng mới, làm cho nó không rỗng và duy nhất và sau đó chỉ điền vào bảng đó khi bạn có giá trị cho nó. Điều này đảm bảo rằng bất kỳ sự phụ thuộc chính nào vào cột có thể được thực thi chính xác và tránh mọi vấn đề có thể gây ra bởi null.