2010-06-21 28 views
9

İki sütun, column_a ve column_b için benzersiz bir bileşik anahtarım varsa, bir sütun boşsa sql'm bu kısıtlamayı yok sayar.MySql bileşik anahtarları ve boş değerler

E.g.

halinde column_a = 1 ve column_b = boş bir ekleyebilir column_a = 1 ve column_b = null kadar ben gibi

column_a = 1 ve column_b = 2 sadece bir kez bu değeri eklemek eğer.

Bu kısıtlamayı, sütunların Boş Değil olarak değiştirilmesi ve varsayılan değerlerin ayarlanması dışında bir yolu var mı?

cevap

13

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

"EŞSİZ endeks endeksindeki tüm değerler farklı olması gerektiğini bir kısıtlama böyle yaratır. Varolan satır eşleşen bir anahtar değeri ile yeni bir satır eklemeye çalıştığınızda bir hata oluşur. Bu kısıtlamayı BDB depolama motoru dışında NULL değerleri için geçerli değildir. Diğer motorlar için, bir UNIQUE dizini NULL içerebilecek sütunlar için birden çok NULL değeri sağlar. "

Yani, hayır, MySQL'in NULL değerini benzersiz bir değer olarak ele alamazsınız. Sanırım birkaç seçeneğiniz var: Sorunuzda önerdiğin şeyi yapabilir ve null yerine "özel bir değer" saklayabilirsin ya da masa için BDB motorunu kullanabilirsin. Yine de, davranışlardaki bu küçük farkın, sıra dışı bir depolama motoru seçimini gerektirdiğini sanmıyorum.

+0

Teşekkürler Hammer! Evet, özel bir değeri saklamak çok fazla zarar vermez ve depolama mekanizmasını değiştirmek benim için kesinlikle daha iyi bir seçenek. – stevebot