In qualsiasi applicazione, è necessario aggiungere record alle tabelle del database e modificare le informazioni memorizzate. L’istruzione UPDATE SQL modifica i dati già memorizzati nel database e l’istruzione INSERT aggiunge un nuovo record a una tabella. L’istruzione UPSERT è una combinazione di INSERT e UPDATE ed esegue un aggiornamento o aggiunge un record se non esiste già. Qui parleremo di AGGIORNAMENTO SQL rispetto a INSERT rispetto a UPSERT.
Come utilizzare l’AGGIORNAMENTO in SQL: esempi
L’istruzione UPDATE aggiorna un record corrente con le nuove informazioni specificate. Ad esempio, un cliente potrebbe spostare e modificare le proprie informazioni di contatto in una tabella di e-commerce e una dichiarazione di AGGIORNAMENTO eseguirà la modifica. Qualsiasi modifica apportata in un database utilizzerà l’istruzione UPDATE.
È importante notare che l’ottimizzazione delle query riduce la latenza del database. Una query UPDATE ottimizzata può ridurre l’elaborazione dei dati a pochi millisecondi. L’infrastruttura è importante anche per la bassa latenza nei server di database a volumi elevati. Per iniziare, utilizza le seguenti query. L’indicizzazione delle colonne comunemente aggiornate potrebbe contribuire a migliorare le performance. Sui workload simultanei di grandi dimensioni, potrebbe essere necessario che gli sviluppatori di database utilizzino livelli di isolamento per evitare che altre dichiarazioni influiscano sull’elaborazione.
Inoltre, gli sviluppatori e gli amministratori di database dovrebbero gestire gli errori nel codice. Questi esempi mostrano come eseguire ogni comando, ma la logica di business deve determinare cosa fare se si verifica un errore. Ad esempio, se il database non riesce a inserire un nuovo record cliente, informare l’utente di riprovare o contattare il servizio clienti. La latenza dei database, gli errori e gli avvisi di ottimizzazione possono essere eseguiti con gli strumenti di monitoraggio delle performance.
Per la maggior parte degli AGGIORNAMENTI SQL, l’utente utilizza la clausola WHERE. La clausola WHERE determina quali record verranno aggiornati e lascia gli altri inalterati. Se non si utilizza una clausola WHERE durante l’esecuzione di un’istruzione UPDATE, il database apporterà modifiche a tutti i record nel database, il che è probabilmente un errore. Assicurati di avere una clausola WHERE nell’istruzione SQL per evitare questo errore.
La sintassi dell’istruzione UPDATE dipende dal motore di database utilizzato. I database MySQL e Oracle SQL utilizzano una sintassi simile per i loro report UPDATE. I seguenti esempi trasformano il nome di un cliente in “john”, dove l’ID del cliente è 44.
MySQL: Comando AGGIORNA
|
1 2 3 4 5 |
AGGIORNA Cliente SET first_name = “John” DOVE ID = 44; |
SQL Oracle: Comando AGGIORNA
|
1 2 3 4 5 |
AGGIORNA Cliente SET first_name = “John” DOVE ID = 44; |
Come utilizzare INSERT in SQL: esempi
Quando si desidera aggiungere un nuovo record a una tabella, si utilizza l’istruzione INSERT SQL. La maggior parte dei progettisti di database crea una colonna predefinita per fornire a ogni record un identificatore univoco. L’identificatore univoco viene compilato automaticamente, quindi non viene inserito manualmente e consente al motore di database di farlo per conto dell’utente. Non è possibile inserire valori duplicati nelle righe degli identificatori, quindi è più efficiente consentire al database di farlo per conto dell’utente.
Nei seguenti esempi, un nuovo cliente viene aggiunto alla tabella Cliente con un nome e un cognome compilati nelle colonne appropriate. Si noti che le colonne vengono definite insieme ai valori da aggiungere rispettivamente a ciascuna colonna.
MySQL: Comando AGGIORNA
|
1 2 3 4 5 6 7 |
INSERIRE NEL cliente (first_name, last_name) VALORI (“John”, “Smith”) SQL Oracle: Comando AGGIORNA INSERIRE NEL cliente (first_name, last_name) VALORI (“John”, “Smith”) |
Come utilizzare UPSERT in SQL: esempi
Il comando UPSERT è un’istruzione utile quando si desidera inserire una riga solo se non esiste già. Se esiste già, il database aggiornerà il record con nuove informazioni. Il motore di database Oracle ha un comando UPSERT specifico. Con MySQL, il comando utilizza invece il termine SOSTITUISCI.
Gli sviluppatori di applicazioni utilizzano il comando UPSERT per evitare record duplicati, soprattutto quando hanno identificatori univoci collegati, e le dichiarazioni delle applicazioni non devono inserire un record a causa di un record esistente in precedenza. Spesso si verifica quando si importano dati da una tabella all’altra ed è possibile che esistano record duplicati. Ad esempio, si ottiene un elenco dei record dei clienti da un’azienda acquisita e si sa che alcuni clienti sono già nel database aziendale corrente. L’istruzione UPSERT aggiornerà solo i clienti esistenti e aggiungerà nuovi clienti dove non esistono.
MySQL: Comando AGGIORNA
|
1 2 3 |
SOSTITUIRE IN cliente (ID, first_name, last_name) VALORI (44, ‘John’, ‘Smith’) |
Nell’esempio precedente, se il cliente con un identificatore di 44 esiste già, il record originale viene eliminato e viene aggiunto un nuovo record cliente con un identificatore di 44. È importante ricordare che il comando SOSTITUISCI non aggiorna tecnicamente i dati. ma elimina e aggiunge nuovamente una riga alla tabella.
SQL Oracle: Comando AGGIORNA
|
1 2 3 |
UPSERT INTO Customer (ID, first_name, last_name) VALORI (44, ‘John’, ‘Smith’) |
Con Oracle, il comando UPSERT aggiornerà il cliente con un identificatore di 44 invece di eliminarlo e aggiungerlo nuovamente. Se il record non esiste, il motore Oracle aggiungerà il record del cliente alla tabella.
PostGreSQL: Comando INSERT
PostGreSQL non ha un’istruzione UPSERT specifica, ma supporta un tipo di INSERT in cui il server inserirà un nuovo record solo se non esiste già. Se il record esiste, i vincoli della tabella dovrebbero generare un errore ed eseguire un AGGIORNAMENTO anziché un’istruzione INSERIRE. La sintassi PostGreSQL è la seguente:
|
1 2 3 4 5 6 7 8 9 10 11 |
INSERIRE INTO prodotti (ID, nome, prezzo, quantità) VALORI (1, “WidgetA”, 20,99, 90) SU CONFLITTO(id) AGGIORNA IL SET prezzo = ESCLUDED.price, quantità = ESCLUDED.quantity; |
SQL Server: Comando MERGE
Microsoft SQL Server inoltre non supporta un’istruzione UPSERT, ma gli sviluppatori possono utilizzare il comando MERGE per eseguire un’azione simile. L’istruzione MERGE prende un dataset di origine e lo unisce a una tabella, ma inserisce un nuovo record solo se non esiste una riga. Se esiste una riga, l’istruzione MERGE aggiorna il record.
|
1 2 3 4 5 6 7 |
Prodotti MERGE P UTILIZZO DI new_products_source S SU P.ID=S.ID QUANDO È CORRISPONDENTE AGGIORNA IL SET price=S.price, name=S.name, quantity=S.quantity; |
MongoDB: Comando AGGIORNA
MongoDB dispone di un parametro di comando UPDATE per indicare al database di eseguire un’istruzione UPSERT. Come gli altri database, MongoDB inserirà un nuovo record solo se non esiste. Se esiste, il database eseguirà e aggiornerà un record.
|
1 2 3 4 5 6 7 8 9 |
db.products.update( { title: “Red Widget” }, { $inc: { price: 19.00 } }, { upsert: true } ) |
AGGIORNAMENTO e INSERIRE: Differenze in SQL
La maggior parte delle applicazioni utilizza diversi estratti conto UPDATE e INSERT per gestire i dati. INSERIRE le dichiarazioni è necessario quando è necessario aggiungere un record. Quando è necessario modificare i dati già memorizzati, è necessario eseguire l’AGGIORNAMENTO.
L’istruzione INSERT richiede tutte le colonne che devono essere riempite con i valori necessari. L’istruzione UPDATE non richiede la clausola WHERE, ma se la si esclude, tutti i record vengono aggiornati con i dati forniti. È improbabile che tu voglia aggiornare tutti i record, quindi assicurati di includere la clausola WHERE.
Non è possibile utilizzare UPDATE invece di INSERT, ma l’affermazione UPSERT è una buona alternativa. Con l’istruzione UPSERT, il database aggiorna i record dove sono disponibili e li inserisce nella tabella se il record non esiste. INSERT è più veloce di un’istruzione UPDATE a condizione che un database sia ottimizzato correttamente.
UPSERT e AGGIORNAMENTO e INSERIRE: qual è il migliore?
L’affermazione utilizzata dipende da ciò che si desidera fare con i dati nel database. Per le performance, INSERT è meglio di UPSERT, ma non è sempre possibile evitare di utilizzare un’istruzione UPDATE e occorre un modo per verificare che il record non esista già. L’istruzione UPSERT semplifica l’intero processo invece di scrivere un’istruzione IF più lunga in una procedura memorizzata. Se hai grandi aggiornamenti o inserisci dichiarazioni per importare dati e non vuoi duplicati, l’istruzione UPSERT è migliore per le performance. Puoi completare sia l’AGGIORNAMENTO che l’INSERIMENTO in un’unica azione.
Quando utilizzare l’AGGIORNAMENTO in SQL
L’unico modo per modificare i dati in una tabella di database è con l’istruzione UPDATE. Le applicazioni cambiano continuamente i dati per vari motivi e utilizzano istruzioni SQL UPDATE nel backend. Quando si modificano le informazioni di contatto, i dati della carta di credito o un indirizzo di spedizione per un account online, è probabile che il sistema applicativo di backend esegua un estratto conto AGGIORNAMENTO.
Usa AGGIORNAMENTO quando devi solo modificare dati e duplicati non è un problema. Una semplice istruzione UPDATE non è lenta, ma più colonne e righe devono essere modificate possono rallentare i servizi di database. Potrebbe essere vantaggioso eseguire un’istruzione di AGGIORNAMENTO di grandi batch nelle ore non di punta.
Quando utilizzare INSERT in SQL
Per aggiungere un record a una tabella è necessario inserire l’istruzione INSERT. Ogni volta che ti iscrivi a un’applicazione o ordini un nuovo prodotto da un negozio di e-commerce, il database di backend utilizza l’istruzione INSERT SQL per aggiungere un nuovo record al database. Il nuovo record può essere modificato in un secondo momento con l’istruzione UPDATE, ma viene creato per la prima volta con l’istruzione INSERT.
INSERIRE le affermazioni è generalmente veloce. Quando è necessario aggiungere un record, è inevitabile. Analogamente alle dichiarazioni UPDATE, gli inserti di grandi dimensioni (come l’importazione di dati da un file statico) potrebbero essere ottimizzati meglio se vengono eseguiti durante le ore non di punta. I file di registro per l’audit e la registrazione utilizzano semplici istruzioni INSERT.
Quando utilizzare UPSERT in SQL
L’istruzione UPSERT ha le performance minime tra tutti e tre i comandi, ma ha uno scopo quando si hanno diversi record da aggiungere a una tabella e non si vogliono duplicare. Quando si importano dati in una tabella e si pensa che possano esserci record duplicati, utilizzare l’istruzione UPSERT per aggiornare i record correnti invece di aggiungerne di duplicati. Ad esempio, se è necessario importare i clienti da un file esterno nelle tabelle del database, un’istruzione UPSERT potrebbe essere più appropriata rispetto all’utilizzo di un’istruzione INSERT.
Le dichiarazioni UPSERT sono generalmente vantaggiose se si dispone di un dataset di origine di grandi dimensioni che potrebbe avere duplicati. Ad esempio, non è consigliabile duplicare una tabella di prodotti, quindi è consigliabile utilizzare UPSERT invece di utilizzare un’istruzione INSERT e rimuovere i duplicati in un secondo momento. UPSERT è ideale quando si utilizzano grandi batch di dati, ma potrebbe causare problemi di latenza se vengono utilizzati inutilmente per tutte le istruzioni INSERT. Usa UPSERT solo quando potresti importare duplicati in una tabella principale.
Domande frequenti
Scopri le versioni distinte. Unico in SQL
Ora che hai un’idea di quando utilizzare UPDATE, INSERT e UPSERT, fai il passo successivo e chiarisci in che modo DISTINCT e UNIQUE differiscono quando devi controllare i valori duplicati al momento della query.






