Aggiungere un record con un certo valore solo se non esiste in tabella

Ho una tabella mysql nella quale è definita una chiave primaria su una colonna, e vorrei poter fare in modo d'inserire un record con un certo valore per questa colonna solo se il record con detto valore non sia già presente in tabella.

 

Sono a conoscenza del fatto che potrei eseguire direttamente la query INSERT e far generare un errore nel caso in cui il record sia già presente, ma esiste un modo più corretto di farlo? Grazie per l'eventuale aiuto.

Risolta 5
MySql 02-04-2019 2 Risposte 1542 Visite +2
Bartolomeo Fintesan

Bartolomeo Fintesan

Autore di questa domanda

Risposte ( 2 approvate )

  1. Giacomo Barrile
    0
    02-04-2019 16:16:15
    Rispondi

    Puoi usare lo statemet INSERT IGNORE, traducendo direttamente dalla documentazione mysql otterrai quello che desideri, esso infatti riporta:

    Se si utilizza la parola chiave IGNORE, 
    gli errori che si verificano durante l'esecuzione dell'istruzione INSERT 
    vengono invece considerati come avvertenze. Ad esempio, senza IGNORE, 
    una riga che duplica un indice UNIQUE esistente o un valore PRIMARY KEY 
    nella tabella causa un errore della chiave duplicata e l'istruzione viene interrotta.
    Con IGNORE, la riga non viene ancora inserita, ma non viene emesso alcun errore.

    Se invece vuoi aggiornare il record nel caso in cui questo sia già presente allora piuttosto che la INSERT IGNORE devi utilizzare la INSERT ... ON DUPLICATE KEY ...

  2. Giorgio Borelli
    0
    02-04-2019 16:10:39
    Rispondi

    Per inserire un record in una tabella mysql solo se questo non è presente sulla tua chiave primaria, puoi usare la INSERT IGNORE, in questo modo:

    mysql> INSERT IGNORE INTO your_table (col_one, col_two) VALUES(13,'abcde');
    
    Query OK, 0 rows affected (0.00 sec)

    se ad es. la tua chiave primaria è composta da campi 'col_one' e 'col_two' ed il record con i valori 13 e 'abcde' è già presente, in tal caso il motore del database mysql ignorerà la INSERT e darà 0 righe coinvolte come risultato della query.

    Questo è ovviamente solo un esempio, funziona anche con una chiave primaria definita su una sola colonna, e presumo sia facile adattarlo al tuo caso.

Rispondi

Per poter rispondere a questa domanda, devi essere registrato e loggato sul sito, dopodichè compila il box sottostante cercando di essere il più chiaro ed esauriente possibile, la tua risposta potrebbe essere la soluzione che l'utente cerca ed essere contrassegnata come migliore, consentendoti così di ottenere punti ed autorevolezza.

 Domanda Precedente

 Elenco Domande 

Domanda Successiva