Risposte:
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
Ho una tabella 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`)
);
e UNIQUE KEY funziona esattamente come previsto, consente più righe NULL di id_box_elements e id_router.
Sto eseguendo MySQL 5.1.42, quindi probabilmente c'è stato qualche aggiornamento sulla questione discussa sopra. Fortunatamente funziona e speriamo che rimanga tale.
Gli indici univoci a più colonne non funzionano in MySQL se si dispone di un valore NULL in riga poiché MySQL tratta NULL come un valore univoco e almeno attualmente non ha alcuna logica per aggirarlo negli indici a più colonne. Sì, il comportamento è folle, perché limita molte applicazioni legittime di indici multi-colonna, ma è quello che è ... Al momento, è un bug che è stato contrassegnato con "non risolverà" su MySQL bug-track ...
ENGINE BDB
vale, e, 2) questo è un comportamento documentato , sebbene, IMHO, non sia abbastanza apertamente documentato dato quanto possa essere sorprendente / spiacevole. Vedi un bug di MySQL 25544 bugs.mysql.com/bug.php?id=25544 per una discussione.
Hai provato questo?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
UNIQUE KEY
thekey` ( user
, email
, address
) `. Sto usando MYSQL versione 5.5.24 Puoi impostarlo anche in PHPMYADMIN se lo stai usando. Sto usando la versione 3.5.1 di PMA.
Questo funziona con mysql versione 5.5.32
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
MySql 5 o versioni successive si comporta in questo modo (ho appena testato):
Esempio: PRODUCT_NAME, PRODUCT_VERSION 'bicchiere', null 'bicchiere', null 'vino', 1
Ora, se si tenta di inserire nuovamente ('wine' 1), verrà segnalata una violazione del vincolo. Spero che questo aiuti
È possibile aggiungere indici univoci a più colonne tramite phpMyAdmin . (Ho testato nella versione 4.0.4)
Passa alla pagina della struttura per la tabella di destinazione. Aggiungi un indice univoco a una delle colonne. Espandi l' elenco degli indici nella parte inferiore della pagina della struttura per visualizzare l'indice univoco appena aggiunto. Fai clic sull'icona di modifica e nella finestra di dialogo seguente puoi aggiungere colonne aggiuntive a quell'indice univoco.
Lo faccio così:
CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);
La mia convenzione per un unico index_name
è TableName_Column1_Column2_Column3_uindex
.
Per aggiungere un indice univoco sono richiesti:
1) table_name
2) index_name
3) colonne su cui si desidera aggiungere l'indice
ALTER TABLE `tablename`
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);
Nel tuo caso possiamo creare un indice univoco come segue:
ALTER TABLE `votes`ADD
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);
Se stai creando una tabella in mysql, utilizza quanto segue:
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)
);
Per prima cosa sbarazzati dei duplicati esistenti
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;
Quindi aggiungere il vincolo univoco
ALTER TABLE votes ADD UNIQUE unique_index(user, email, address);
Verificare il vincolo con
SHOW CREATE TABLE votes;
Nota che l'utente, l'e-mail e l'indirizzo saranno considerati unici se qualcuno di essi ha un valore nullo al suo interno.
Per PostgreSQL ... Non ha funzionato per me con indice; mi ha dato un errore, quindi ho fatto questo:
alter table table_name
add unique(column_name_1,column_name_2);
PostgreSQL ha dato il proprio nome all'indice univoco. Suppongo che puoi cambiare il nome dell'indice nelle opzioni per la tabella, se è necessario cambiarlo ...