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:

inserisci la descrizione dell'immagine qui


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:

inserisci la descrizione dell'immagine qui

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 .



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow