Jawaban:
Ya, MySQL memungkinkan beberapa NULL dalam kolom dengan batasan unik.
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;
Hasil:
x
NULL
NULL
1
Ini tidak benar untuk semua basis data. SQL Server 2005 dan yang lebih lama, misalnya, hanya memungkinkan nilai NULL tunggal dalam kolom yang memiliki batasan unik.
WHERE column IS NOT NULL
sepertinya tidak mengecewakan saya karena tidak didukung dalam versi MySQL saya. Adakah yang tahu di mana saya bisa melihat?
Dari dokumen :
"indeks UNIK memungkinkan beberapa nilai NULL untuk kolom yang dapat berisi NULL"
Ini berlaku untuk semua mesin kecuali BDB .
Saya tidak yakin apakah penulis awalnya hanya bertanya apakah ini memungkinkan nilai duplikat atau apakah ada pertanyaan tersirat di sini yang bertanya, "Bagaimana mengizinkan NULL
nilai duplikat saat menggunakan UNIQUE
?" Atau "Bagaimana hanya mengizinkan satu UNIQUE
NULL
nilai?"
Pertanyaan sudah dijawab, ya Anda bisa memiliki NULL
nilai duplikat saat menggunakan UNIQUE
indeks.
Karena saya menemukan jawaban ini sambil mencari "cara mengizinkan satu UNIQUE
NULL
nilai." Bagi siapa pun yang mungkin menemukan pertanyaan ini sambil melakukan hal yang sama, sisa jawaban saya adalah untuk Anda ...
Di MySQL Anda tidak dapat memiliki satu UNIQUE
NULL
nilai, namun Anda dapat memiliki satu UNIQUE
nilai kosong dengan memasukkan nilai string kosong.
Peringatan: Numerik dan tipe selain string mungkin default ke 0 atau nilai default lainnya.
UNIQUE
kendala tetapi karena NOT NULL
kendala. Saya pikir jawaban ini tidak relevan dengan pertanyaan karena pertanyaannya secara khusus tentang perilaku UNIQUE
kendala.
Hindari batasan unik yang tidak dapat dibatalkan. Anda selalu dapat meletakkan kolom di tabel baru, membuatnya non-null dan unik dan kemudian mengisi tabel itu hanya ketika Anda memiliki nilai untuk itu. Ini memastikan bahwa setiap ketergantungan utama pada kolom dapat ditegakkan dengan benar dan menghindari masalah yang dapat disebabkan oleh nol.