Yanıtlar:
Evet, MySQL, benzersiz bir kısıtlamaya sahip bir sütunda birden fazla NULL'a izin verir.
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;
Sonuç:
x
NULL
NULL
1
Bu, tüm veritabanları için geçerli değildir. Örneğin, SQL Server 2005 ve daha eski sürümleri, yalnızca benzersiz bir kısıtlaması olan bir sütunda tek bir NULL değerine izin verir.
WHERE column IS NOT NULL
MySQL sürümümde desteklenmediği için bana başarısız bile görünmüyor. Nereye bakabileceğimi bilen var mı?
Gönderen docs :
"BENZERSİZ bir dizin NULL içerebilen sütunlar için birden çok NULL değerine izin veriyor"
Bu, BDB dışındaki tüm motorlar için geçerlidir .
Yazarın başlangıçta bunun yinelenen değerlere izin verip vermediğini sorduğundan veya burada " NULL
Kullanırken yinelenen değerlere nasıl izin verilir UNIQUE
?" Veya "Yalnızca bir UNIQUE
NULL
değere nasıl izin verilir ?"
Soru zaten cevaplandı, evet dizini NULL
kullanırken yinelenen değerleriniz olabilir UNIQUE
.
Ben "bir UNIQUE
NULL
değere nasıl izin verilir" için arama yaparken bu cevap tökezledi beri . Aynısını yaparken bu soruya rastlayabilecek herkes için, cevabımın geri kalanı sizin için ...
MySQL'de bir UNIQUE
NULL
değere sahip olamazsınız , ancak UNIQUE
boş bir dizenin değeri ile ekleyerek bir boş değere sahip olabilirsiniz .
Uyarı: Dize dışındaki sayısal ve türler varsayılan olarak 0 veya başka bir varsayılan değer olabilir.
UNIQUE
kısıtlamadan değil , kısıtlamadan dolayı başarısız olması NOT NULL
. Bence bu cevap soru ile alakasız çünkü soru özellikle UNIQUE
kısıtlama davranışı ile ilgili .
Null olabilecek benzersiz kısıtlamalardan kaçının. Sütunu her zaman yeni bir tabloya yerleştirebilir, boş olmayan ve benzersiz hale getirebilir ve daha sonra bu tabloyu yalnızca bir değeriniz olduğunda doldurabilirsiniz. Bu, sütuna herhangi bir tuş bağımlılığının doğru bir şekilde uygulanmasını sağlar ve boş değerlerin neden olabileceği sorunları önler.