Condividi
Inserire un record nella tabella MySql solo se non esiste già
Vorrei inserire un record in una tabella MySql solo se questo non è già presente all'interno dell'archivo, è possibile farlo con una query sql diretta o devo prima verificarlo con una select e poi eventualmente fare la insert?
Questa seconda possibilità mi sembra alquanto macchinosa e dispendiosa in termini di performance, potreste aiutarmi?
In Corso
5
MySql
10-12-2018
2 Risposte
4965 Visite
0
Risposte ( 2 approvate )
Per inserire un record o un valore 'primario' solo nel caso in esso non esista già nella tabella hai due strade:
Quindi, facendo leva su una chiave primaria (PRIMARY KEY) o su un INDICE UNICO (UNIQUE INDEX) il motore di MySql verifica che per questi tipi di colonna il valore non sia già presente in archivio, nel caso di INSERT IGNORE non farà nulla (quindi nessuna riga viene coinvolta) nel caso della On DUPLICATE KEY essendo un'azione a posteriore dell'errore (violazione del vincolo di unicità sulla chiave primaria ad esempio) la riga sarà comunque 'affetta' dall'istruzione.
Agganciandomi a quasto scritto da Giorgio, la sintassi sql per la INSERT IGNORE è:
se il record con valore della chiave primaria = 1 già esiste questa query sarà ignorata (0 rows affected) e non sarà restituito alcun errore da parte di MySql ma solo un warning.
Mentre per la ON DUPLICATE KEY avrai:
Che non solo ti consente di aggiornare eventuali valore (colonne del record) nel caso questo esista già, ma MySql tiene traccia che la riga è stata modificata (1 row affected).