Corsi on-line

MySQL: inserire un record se non presente in tabella

Immaginiamo di voler inserire un determinato record in tabella e di voler impedire l’esecuzione della relativa query nel caso in cui questo sia già stato rgistrato, in questo caso utilizzeremo la clausola IGNORE come nell’esempio seguente:

INSERT IGNORE INTO nazioni (stato) VALUES ('Italia');

Ora si immagini di voler inserire due valori con una query come la seguente:

INSERT INTO nazioni (stato,anno) VALUES ('Italia',1861);

Per evitare ripetizioni si potrebbero eseguire due diverse query, ma la nostra soluzione sarebbe alquanto inelegante, per questo motivo potremmo far riferimento a “DUAL”, una tabella virtuale, o meglio, un riferimento ad una tabella inesistente; essa consente di eseguire una query soltanto se viene soddisfatta la condizione introdotta dalla clausola di un’estrazione effettuata su di essa. Ecco un esempio pratico del suo utilizzo:

INSERT INTO nazioni (stato,anno) SELECT 'Italia',1861 FROM DUAL WHERE NOT EXISTS (SELECT stato FROM nazioni WHERE stato="Italia" AND anno=1861);

In questo modo il nostro problema potrà essere risolto con un’unica istruzione.

Post correlati
I più letti del mese
Tematiche