Domanda

Ho una tabella:

table votes (
    id,
    user,
    email,
    address,
    primary key(id),
);

Ora voglio rendere le colonne utente, email, indirizzo uniche (insieme).

Come posso farlo in MySql?

  • Naturalmente l'esempio è solo ... un esempio. Quindi, per favore, non preoccuparti della semantica.
È stato utile?

Soluzione

ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);

Altri suggerimenti

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 considera 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à". sulla traccia di bug di MySQL ...

Hai provato questo?

UNIQUE KEY `thekey` (`user`,`email`,`address`)

Funziona con mysql versione 5.5.32

ALTER TABLE  `tablename` ADD UNIQUE (`column1` ,`column2`);

Puoi aggiungere indici univoci a più colonne tramite phpMyAdmin . (Ho testato nella versione 4.0.4)

Vai alla pagina struttura per la tabella di destinazione. Aggiungi un indice univoco a una delle colonne. Espandi l'elenco 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.

MySql 5 o versioni successive si comporta in questo modo (ho appena testato):

  • è possibile definire vincoli univoci che coinvolgono colonne nullable. Supponi di definire un vincolo univoco (A, B) in cui A non è nullable ma B è
  • quando si valuta un tale vincolo si può avere (A, null) quante volte si desidera (stesso valore A!)
  • puoi avere solo una coppia (A, non nulla B)

Esempio: PRODUCT_NAME, PRODUCT_VERSION "bicchiere", null "bicchiere", null "vino", 1

Ora se provi a inserire nuovamente ('wine' 1) segnalerà una violazione del vincolo Spero che questo aiuti

Lo faccio in questo modo:

CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);

La mia convenzione per un nome_indice univoco è TableName_Column1_Column2_Column3_uindex .

Se vuoi evitare duplicati in futuro. Crea un'altra colonna dire id2.

UPDATE tablename SET id2 = id;

Ora aggiungi il carattere unico su due colonne:

alter table tablename add unique index(columnname, id2);

Per aggiungere un indice univoco sono richiesti:

1) nome_tabella
2) nome_indice
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, usa 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)
);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top