MySQL
AGGIORNARE
Ricerca…
Sintassi
UPDATE [LOW_PRIORITY] [IGNORE] tableName SET column1 = expression1, column2 = expression2, ... [WHERE conditions]; // Semplice aggiornamento a tabella singola
UPDATE [LOW_PRIORITY] [IGNORE] tableName SET column1 = expression1, column2 = expression2, ... [WHERE conditions] [ORDER BY expression [ASC | DESC]] [LIMIT row_count]; // Aggiornamento con ordine per e limite
UPDATE [LOW_PRIORITY] [IGNORE] table1, table2, ... SET column1 = expression1, column2 = expression2, ... [WHERE conditions]; // Aggiornamento di più tabelle
Aggiornamento di base
Aggiornamento di una riga
UPDATE customers SET email='[email protected]' WHERE id=1
Questa query aggiorna il contenuto email
nella tabella customers
alla stringa [email protected]
dove il valore di id
è uguale a 1. I vecchi e nuovi contenuti della tabella del database sono illustrati di seguito rispettivamente a sinistra ea destra:
Aggiornamento di tutte le righe
UPDATE customers SET lastname='smith'
Questa query aggiorna il contenuto del lastname
per ogni voce nella tabella dei customers
. I vecchi e nuovi contenuti della tabella del database sono illustrati di seguito rispettivamente a sinistra ea destra:
Avviso: è necessario utilizzare le clausole condizionali (WHERE) nella query UPDATE. Se non si utilizza alcuna clausola condizionale, verranno aggiornati tutti i record dell'attributo di quella tabella. Nell'esempio sopra, il nuovo valore (Smith) del cognome nella tabella clienti è impostato su tutte le righe.
Aggiorna con Join Pattern
Prendi in considerazione una tabella di produzione chiamata questions_mysql
e una tabella iwtQuestions
(worktable importato) che rappresenta l'ultimo batch di dati CSV importati da LOAD DATA INFILE
. Il piano di lavoro viene troncato prima dell'importazione, i dati vengono importati e tale processo non viene mostrato qui.
Aggiorna i nostri dati di produzione utilizzando un join per i dati del nostro tavolo di lavoro importato.
UPDATE questions_mysql q -- our real table for production
join iwtQuestions i -- imported worktable
ON i.qId = q.qId
SET q.closeVotes = i.closeVotes,
q.votes = i.votes,
q.answers = i.answers,
q.views = i.views;
Gli alias q
e i
sono usati per abbreviare i riferimenti della tabella. Questo facilita lo sviluppo e la leggibilità.
qId
, la chiave primaria, rappresenta l'id della domanda StackOverflow. Quattro colonne vengono aggiornate per le righe corrispondenti dal join.
AGGIORNA con ORDINA BY e LIMIT
Se la clausola ORDER BY
è specificata nell'istruzione SQL di aggiornamento, le righe vengono aggiornate nell'ordine specificato.
Se la clausola LIMIT
viene specificata nell'istruzione SQL, ciò pone un limite al numero di righe che possono essere aggiornate. Non c'è limite, se la clausola LIMIT
non è specificata.
ORDER BY
e LIMIT
non possono essere utilizzati per l'aggiornamento di più tabelle.
La sintassi per l' UPDATE
MySQL con ORDER BY
e LIMIT
è,
UPDATE [ LOW_PRIORITY ] [ IGNORE ]
tableName
SET column1 = expression1,
column2 = expression2,
...
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]]
[LIMIT row_count];
---> Example
UPDATE employees SET isConfirmed=1 ORDER BY joiningDate LIMIT 10
Nell'esempio precedente, 10 righe verranno aggiornate in base all'ordine dei dipendenti che si joiningDate
.
UPDATE su più tabelle
Nella tabella multipla UPDATE
, aggiorna le righe in ogni tabella specificata che soddisfano le condizioni. Ogni riga corrispondente viene aggiornata una volta, anche se corrisponde alle condizioni più volte.
Nella tabella multipla UPDATE
, ORDER BY
e LIMIT
non possono essere utilizzati.
La sintassi per multi tavolo UPDATE
è,
UPDATE [LOW_PRIORITY] [IGNORE]
table1, table2, ...
SET column1 = expression1,
column2 = expression2,
...
[WHERE conditions]
Ad esempio, considera due tabelle, products
e salesOrders
. Nel caso, riduciamo la quantità di un particolare prodotto dall'ordine di vendita che è già stato inserito. Quindi abbiamo anche bisogno di aumentare tale quantità nella nostra tabella dei products
di magazzino. Questo può essere fatto in un'unica istruzione di aggiornamento SQL come di seguito.
UPDATE products, salesOrders
SET salesOrders.Quantity = salesOrders.Quantity - 5,
products.availableStock = products.availableStock + 5
WHERE products.productId = salesOrders.productId
AND salesOrders.orderId = 100 AND salesOrders.productId = 20;
Nell'esempio sopra, la quantità "5" verrà ridotta dalla tabella salesOrders
e la stessa verrà aumentata nella tabella products
base alle condizioni WHERE
.
Bulk UPDATE
Quando si aggiornano più righe con valori diversi, è molto più rapido utilizzare un aggiornamento collettivo.
UPDATE people
SET name =
(CASE id WHEN 1 THEN 'Karl'
WHEN 2 THEN 'Tom'
WHEN 3 THEN 'Mary'
END)
WHERE id IN (1,2,3);
Con l'aggiornamento alla rinfusa, è possibile inviare una sola query al server anziché una query per ogni riga da aggiornare. I casi dovrebbero contenere tutti i possibili parametri cercati nella clausola WHERE
.