2012-07-03 4 views
6

ISBN'ler içeren bir MySQL MyISAM tablom var. Değer boşsa veya boşsa "duplicate" hatası alamayacak bir UNIQUE dizini oluşturmak istiyorum.mysql benzersiz dizin EXCEPT boş veya boş

Bu mümkün mü? Eğer böyle bir şey kullanabilirsiniz

cevap

2

MyISAM (veya INNODB) depolama motorunu kullandığınızdan, kısa yanıt hayır. Birden çok boş dizge olsa bile, çoklu boş dizeler benzersiz dizin kısıtlaması için çalışmaz. Yalnızca bir SQL çözümü istiyorsanız en iyi bahsiniz, ISBN alanında düzenli bir dizin oluşturmak ve daha sonra boş veya boş değilse, benzersizliği kontrol eden bir ekleme proxy'si olarak hareket etmek için saklı yordamı kullanmaktır.

sadece sizin için işi NULL'ları, burada bir temel oluşturmak:

CREATE TABLE `books` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `isbn` int(13) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `isbn` (`isbn`) 
) 

Sadece bir not ... hatırla döndürürken '13' basamak int içindir belirtilen sadece sayı gösterecektir bir tamsayı değil, bir sorgu.

+1

NULL sahibi olmaktan iyiyim. Bunu ayarlamak için, INT (13) DEFAULT NULL'u ayarlayabilir miyim? – nick

+1

@nick Evet, yukarıdaki soruya eklediğim create deyimime bakın, bunu ALTER TABLE'da da kullanabilirsiniz. – Ray

3

,

ALTER tablo EŞSİZ index_name (column_list) ADD tbl_name:

Bu ifade NULL değerlerin dışında, may ile değerleri benzersiz olmalıdır kendisi için bir dizin (yaratır birden çok kez görünür). MySQL INDEXES'a bakın.