lunedì 12 febbraio 2018

MYSQL: impedire inserimento duplicati

Quando si progetta un'applicazione che si appoggia al database mysql, a volte conviene non lasciare la gestione delle tabelle al 100% allo script php (o in qualsiasi linguaggio il sito o l'app sia realizzata).
Ad esempio, se voglio essere sicuri al 100% che nessuno possa mai inserire dei record doppi, occorre lavorare sul database più che sull'app.

Vediamo quindi come fare per impedire l'inserimento di record doppi su mysql, utilizzando gli indici, in modo tale da impedire fisicamente qualsiasi operazione di inserimento di duplicati da parte di un sito web che si collega al nostro db sql.


Come impedire l'inserimento duplicati in MYSQL


Per bloccare a monte l'inserimento di record doppi in una tabella mysql, occorre usare gli indici.
Grazie agli indici di mysql infatti, è possibile evitare che un record venga inserito più volte.
Occorre individuare il campo o i campi che devono essere univoci, e creargli sopra un indice.

Vediamo subito la sintassi da utilizzare per aggiungere un indice univoco:

ALTER TABLE nome-tabella ADD UNIQUE(`nome-campo`);

Con questa semplice riga di codice sql infatti, avremo assegnato un indice univoco al campo desiderato.
Da ora in avanti dunque, non sarà più possibile inserire per quel campo dei valori uguali.
Il contro di questo metodo, è che ovviamente la tabella deve essere già sistemata prima di creare l'indice univoco, ovvero non devono esistere già dei duplicati nel campo da rendere unico, altrimenti non sarà possibile inserire l'indice.


Come creare un indice univoco con più campi


Ci sono poi dei casi in cui la chiave univoca da creare deve contenere più campi.
Prendiamo ad esempio il caso in cui in una tabella mysql non vogliamo che ci siano dei duplicati di persone che si chiamano nello stesso nome, ovvero facciamo finta di voler bloccare a monte l'inserimento di nome e cognome uguali.
Ecco cosa bisogna scrivere per creare quest'indice univoco multicampo:

ALTER TABLE nome-tabella ADD UNIQUE `nome-cognome` (`nome`, `cognome`);

Avremo così creato un unico indice che contiene due campi, a cui abbiamo anche dato un nome.
Grazie a questo indice sql, se si proveranno ad inserire 2 Mario Rossi, il database mysql genererà un errore del tipo:
"Valore duplicato 'Mario-Rossi' per la chiave 'nome-cognome'".

Bene, con gli indici univoci mysql per oggi è tutto!

Piaciuto l'articolo? Lascia un commento!

EmoticonEmoticon