Yanıtlar:
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
Bir MySQL tablo var:
CREATE TABLE `content_html` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_box_elements` int(11) DEFAULT NULL,
`id_router` int(11) DEFAULT NULL,
`content` mediumtext COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_box_elements` (`id_box_elements`,`id_router`)
);
ve BENZERSİZ ANAHTAR beklendiği gibi çalışır, id_box_elements ve id_router çoklu NULL satırlarına izin verir.
MySQL 5.1.42 çalıştırıyorum, bu yüzden muhtemelen yukarıda tartışılan konuda bazı güncelleme vardı. Neyse ki çalışıyor ve umarım bu şekilde kalacaktır.
MySQL NULL'a benzersiz bir değer olarak davranır ve en azından şu anda çok sütunlu dizinlerde geçici olarak çalışacak bir mantık yoksa, satırda NULL değeriniz varsa, çok sütunlu benzersiz dizinler MySQL'de çalışmaz. Evet davranış çılgınca, çünkü çok sütunlu indekslerin bir çok meşru uygulamasını sınırlıyor, ama ne olduğu ... Şimdilik, MySQL'de "düzeltilmeyecek" ile damgalanmış bir hata bug-track ...
ENGINE BDB
ve 2) bu belgelenmiş davranıştır, ancak IMHO, ne kadar şaşırtıcı / nahoş olabileceği göz önüne alındığında yeterince açık bir şekilde belgelenmemiştir. Tartışma için MySQL hatası 25544 bugs.mysql.com/bug.php?id=25544 adresine bakın .
Bunu denedin mi?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
UNIQUE KEY
thekey` ( user
, email
, address
) `. MYSQL 5.5.24 sürümünü kullanıyorum Bunu PHPMYADMIN'de bile kullanıyorsanız ayarlayabilirsiniz. PMA'nın 3.5.1 sürümünü kullanıyorum.
Bu, mysql sürüm 5.5.32 için çalışır
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
MySql 5 veya üstü bu şekilde davranır (yeni test ettim):
Örnek: PRODUCT_NAME, PRODUCT_VERSION 'bardak', boş 'bardak', boş 'şarap', 1
Şimdi tekrar ('şarap' 1) eklemeye çalışırsanız, bir sınırlama ihlali bildirecektir.
PhpMyAdmin ile çok sütunlu benzersiz dizinler ekleyebilirsiniz . (Sürüm 4.0.4'te test ettim)
Hedef tablonuzun yapı sayfasına gidin . Sütunlardan birine benzersiz bir dizin ekleyin. Eklediğiniz benzersiz dizini görmek için yapı sayfasının altındaki Dizinler listesini genişletin . Düzenle simgesini tıklayın ve aşağıdaki iletişim kutusunda bu benzersiz dizine ek sütunlar ekleyebilirsiniz.
Bunu şöyle yaparım:
CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);
Eşsiz index_name
olan için benim sözleşmem TableName_Column1_Column2_Column3_uindex
.
Benzersiz dizin eklemek için aşağıdakiler gereklidir:
1) tablo_adı
2) dizin_adı
3) dizin eklemek istediğiniz sütunlar
ALTER TABLE `tablename`
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);
Sizin durumunuzda aşağıdaki gibi benzersiz bir dizin oluşturabiliriz:
ALTER TABLE `votes`ADD
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);
MySQL'de tablo oluşturuyorsanız, aşağıdakileri kullanın:
create table package_template_mapping (
mapping_id int(10) not null auto_increment ,
template_id int(10) NOT NULL ,
package_id int(10) NOT NULL ,
remark varchar(100),
primary key (mapping_id) ,
UNIQUE KEY template_fun_id (template_id , package_id)
);
İlk önce mevcut kopyalardan kurtulun
delete a from votes as a, votes as b where a.id < b.id
and a.user <=> b.user and a.email <=> b.email
and a.address <=> b.address;
Ardından benzersiz kısıtlamayı ekleyin
ALTER TABLE votes ADD UNIQUE unique_index(user, email, address);
Kısıtlamayı aşağıdakilerle doğrulayın:
SHOW CREATE TABLE votes;
Kullanıcı, e-posta, adresin herhangi birinde boş değer varsa benzersiz kabul edileceğini unutmayın.
PostgreSQL için ... Benim için dizinle çalışmadı; bana bir hata verdi, bu yüzden bunu yaptım:
alter table table_name
add unique(column_name_1,column_name_2);
PostgreSQL benzersiz dizine kendi adını verdi. Eğer değiştirilmesi gerekiyorsa, tablo seçeneklerinde dizin adını değiştirebilirsiniz sanırım ...