Questa pagina spiega come aggiornare i dati esistenti in un database MySQL.
Quindi abbiamo già aggiunto i dati al nostro database. Ma ora ci rendiamo conto che i nostri dati contengono un errore. Alle mele è stato assegnato un
UnitId
di 1
— ma dovrebbe essere 2
.
Puoi vederlo qui:
Nessun problema. Aggiorneremo solo quel record.
Il UPDATE
Dichiarazione
Il codice SQL UPDATE
dichiarazione ci consente di aggiornare i dati nel nostro database. Possiamo utilizzare questa istruzione per modificare l'ID unità da 1
a 2
. Per fare ciò, utilizziamo il WHERE
clausola per specificare il record esatto che dobbiamo aggiornare. In questo modo:
UPDATE Fruit SET UnitId = 2 WHERE FruitId = 1;
In genere, è consigliabile quando si esegue un UPDATE
operazione, per specificare il campo ID del record che stai tentando di aggiornare (o qualunque sia la sua chiave primaria). Questo aiuta a prevenire l'aggiornamento accidentale dei record errati. In questo esempio sapevamo che le mele avevano un FruitId
di 1
. Ma potresti non conoscere sempre l'ID del record che stai tentando di aggiornare. In tal caso potresti fare qualcosa del genere:
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple' AND UnitId = 1;
Possiamo seguire entrambi con un SELECT
dichiarazione ed ecco il risultato:
Nota che DateUpdated anche la colonna è stata aggiornata, anche se non è stato specificato un aggiornamento per quella colonna. Questo perché, quando abbiamo creato la tabella, abbiamo impostato quella colonna in modo che venga aggiornata con la data/ora corrente ogni volta che c'è stato un aggiornamento del record.
Ecco il codice che abbiamo usato quando abbiamo creato quella colonna:
DateUpdated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Più in particolare, è il ON UPDATE CURRENT_TIMESTAMP
ciò ha comportato l'aggiornamento della colonna proprio ora quando abbiamo eseguito UPDATE
dichiarazione.
Aggiornamenti sicuri
Avremmo potuto altrettanto facilmente costruire il nostro UPDATE
comando in questo modo (senza AND UnitId = 1
):
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple';
Tuttavia, potresti riscontrare il seguente errore se provi a farlo:
Modalità aggiornamenti sicuri
Se riscontri l'errore precedente, è perché la tua connessione MySQL è in esecuzione in modalità Aggiornamenti sicuri. Questo aiuta a impedirci di sovrascrivere accidentalmente grandi quantità di dati. Infatti, se avessimo dimenticato di inserire il WHERE
clausola avremmo aggiornato ogni singolo record nella tabella!
Sì, l'esecuzione del codice seguente comporterà l'aggiornamento di tutti i record nella nostra tabella a Banana :
UPDATE Fruit SET FruitName = 'Banana'
Quindi c'è un vero vantaggio nell'esecuzione in modalità Aggiornamenti sicuri.
Tuttavia, se hai davvero bisogno di eseguire quella query (o se tutti i tuoi frutti si sono davvero trasformati in banane), puoi eseguire una delle seguenti operazioni:
- Modifica la tua query per includere una
KEY
colonna. L'abbiamo fatto negli esempi nella parte superiore di questa pagina. - Disabilita la modalità Aggiornamenti sicuri.
Disabilita la modalità Aggiornamenti sicuri
Se trovi che devi eseguire un UPDATE
operazione senza utilizzare un KEY
campo, puoi sempre disattivare la modalità Aggiornamenti sicuri.
Per disabilitare la modalità Aggiornamenti sicuri, esegui il comando seguente prima di eseguire il tuo UPDATE
dichiarazione:
set sql_safe_updates = 0;
È sempre una buona idea ripristinare l'impostazione allo stato precedente una volta terminato, specialmente con impostazioni che potrebbero avere un impatto diffuso come questa.
Per abilitare la modalità Aggiornamenti sicuri, esegui quanto segue:
set sql_safe_updates = 1;
In effetti, potresti eseguire tutto contemporaneamente, in questo modo:
set sql_safe_updates = 0; UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple'; select * from Fruit; set sql_safe_updates = 1;
Aggiorna più campi
È possibile aggiornare più campi utilizzando una virgola per separare ogni assegnazione di campo. In questo modo:
UPDATE Fruit SET FruitName = 'Red Grapes', Inventory = '11' WHERE FruitId = 5;
Risultato: