Jawaban:
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
Saya punya tabel MySQL:
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`)
);
dan KUNCI UNIK berfungsi seperti yang diharapkan, ini memungkinkan beberapa baris NULL id_box_elements dan id_router.
Saya menjalankan MySQL 5.1.42, jadi mungkin ada beberapa pembaruan pada masalah yang dibahas di atas. Untungnya itu berhasil dan mudah-mudahan akan tetap seperti itu.
Indeks unik multi kolom tidak berfungsi di MySQL jika Anda memiliki nilai NULL berturut-turut karena MySQL memperlakukan NULL sebagai nilai unik dan setidaknya saat ini tidak memiliki logika untuk mengatasinya dalam indeks multi-kolom. Ya perilakunya gila, karena membatasi banyak aplikasi yang sah dari indeks multi-kolom, tetapi itu adalah apa ... Sampai sekarang, itu adalah bug yang telah dicap dengan "tidak akan memperbaiki" pada MySQL bug-track ...
ENGINE BDB
, dan, 2) ini perilaku yang didokumentasikan , meskipun, IMHO, tidak cukup terdokumentasi mengingat betapa mengejutkan / tidak menyenangkannya itu. Lihat bug MySQL 25544 bugs.mysql.com/bug.php?id=25544 untuk diskusi.
Sudahkah Anda mencoba ini?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
UNIQUE KEY
thekey` ( user
, email
, address
) `. Saya menggunakan MYSQL versi 5.5.24 Anda dapat mengatur ini bahkan di PHPMYADMIN jika Anda menggunakannya. Saya menggunakan versi 3.5.1 dari PMA.
Ini berfungsi untuk versi mysql 5.5.32
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
MySql 5 atau lebih berperilaku seperti ini (saya baru saja menguji):
Contoh: PRODUCT_NAME, PRODUCT_VERSION 'gelas', nol 'gelas', nol 'anggur', 1
Sekarang jika Anda mencoba memasukkan ('wine' 1) lagi itu akan melaporkan pelanggaran kendala Semoga ini bisa membantu
Anda dapat menambahkan indeks unik beberapa kolom melalui phpMyAdmin . (Saya menguji dalam versi 4.0.4)
Arahkan ke halaman struktur untuk tabel target Anda. Tambahkan indeks unik ke salah satu kolom. Buka daftar Indeks di bagian bawah halaman struktur untuk melihat indeks unik yang baru saja Anda tambahkan. Klik ikon edit, dan dalam dialog berikut Anda dapat menambahkan kolom tambahan ke indeks unik itu.
Saya melakukannya seperti ini:
CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);
Konvensi saya untuk yang unik index_name
adalah TableName_Column1_Column2_Column3_uindex
.
Untuk menambahkan indeks unik, diperlukan:
1) table_name
2) index_name
3) kolom di mana Anda ingin menambahkan indeks
ALTER TABLE `tablename`
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);
Dalam kasus Anda, kami dapat membuat indeks unik sebagai berikut:
ALTER TABLE `votes`ADD
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);
Jika Anda membuat tabel di mysql kemudian gunakan yang berikut:
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)
);
Pertama-tama singkirkan duplikat yang ada
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;
Kemudian tambahkan batasan unik
ALTER TABLE votes ADD UNIQUE unique_index(user, email, address);
Verifikasi kendala dengan
SHOW CREATE TABLE votes;
Perhatikan bahwa pengguna, email, alamat akan dianggap unik jika salah satu dari mereka memiliki nilai nol di dalamnya.
Untuk PostgreSQL ... Tidak berfungsi untuk saya dengan indeks; itu memberi saya kesalahan, jadi saya melakukan ini:
alter table table_name
add unique(column_name_1,column_name_2);
PostgreSQL memberi indeks unik namanya sendiri. Saya kira Anda dapat mengubah nama indeks dalam opsi untuk tabel, jika perlu diubah ...