Sök…


Syntax

  • UPDATE [LOW_PRIORITY] [IGNORE] tabell Namn SET column1 = expression1, column2 = expression2, ... [WHERE conditions]; // Enkel uppdatering av enstaka tabeller

  • UPDATE [LOW_PRIORITY] [IGNORE] tabellnamn SET column1 = expression1, column2 = expression2, ... [WHERE conditions] [ORDER BY expression [ASC | DESC]] [LIMIT row_count]; // Uppdatera med beställning efter och begränsning

  • UPDATE [LOW_PRIORITY] [IGNORE] table1, table2, ... SET column1 = expression1, column2 = expression2, ... [WHERE conditions]; // Uppdatering av flera tabeller

Grundläggande uppdatering

Uppdaterar en rad

UPDATE customers SET email='[email protected]' WHERE id=1

Denna fråga uppdaterar innehållet i email i customers tabellen strängen [email protected] där värdet på id är lika med 1. De gamla och nya innehållet i databastabellen illustreras nedan till vänster och höger respektive:

ange bildbeskrivning här


Uppdaterar alla rader

UPDATE customers SET lastname='smith'

Denna fråga uppdaterar lastname för varje post i customers . Det gamla och nya innehållet i databastabellen illustreras nedan till vänster respektive höger:

ange bildbeskrivning här

Observera: Det är nödvändigt att använda villkorade klausuler (WHERE) i UPDATE-frågan. Om du inte använder någon villkorad klausul uppdateras alla poster i tabellens attribut. I exemplet ovan är nytt värde (Smith) för efternamn i kundtabellen inställt på alla rader.

Uppdatera med gå med mönster

Överväga en produktions tabell som kallas questions_mysql och ett bord iwtQuestions (importerade arbetsbordet) som svarar för den sista satsen av importerade CSV-data från en LOAD DATA INFILE . Arbetsbordet trunkeras före importen, data importeras och den processen visas inte här.

Uppdatera våra produktionsdata med hjälp av en koppling till våra importerade arbetsborddata.

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;

Aliaser q och i används för att förkorta tabellreferenser. Detta underlättar utvecklingen och läsbarheten.

qId , den primära nyckeln, representerar frågan-id för Stackoverflow. Fyra kolumner uppdateras för att matcha rader från sammanfogningen.

UPPDATERING med ORDER BY och LIMIT

Om ORDER BY klausulen anges i din SQL-uppdatering uppdateras raderna i den ordning som anges.

Om LIMIT klausul anges i ditt SQL-uttalande sätter det en gräns för antalet rader som kan uppdateras. Det finns ingen gräns om LIMIT klausulen inte anges.

ORDER BY och LIMIT kan inte användas för uppdatering av flera tabeller.

Syntax för MySQL UPDATE med ORDER BY och LIMIT är,

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

I exemplet ovan kommer 10 rader att uppdateras i enlighet med ordningen för anställda som går med i joiningDate .

Uppdatering av flera tabeller

I UPDATE flera tabeller uppdateras rader i varje specificerad tabell som uppfyller villkoren. Varje matchande rad uppdateras en gång, även om den matchar villkoren flera gånger.

I flera tabeller kan UPDATE , ORDER BY och LIMIT inte användas.

Syntax för multi-tabellen UPDATE är,

UPDATE [LOW_PRIORITY] [IGNORE] 
table1, table2, ...
    SET column1 = expression1,
        column2 = expression2,
        ...
    [WHERE conditions]

Tänk till exempel på två tabeller, products och salesOrders . I fallet minskar vi mängden av en viss produkt från den försäljningsorder som redan har lagts. Då måste vi också öka denna kvantitet i vår lager kolumn products tabellen. Detta kan göras i en enda SQL-uppdatering som nedan.

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;

I ovanstående exempel, kommer kvantiteten '5' minskas från salesOrders tabellen och detsamma kommer att ökas i products tabellen enligt de WHERE förhållanden.

Bulk UPDATE

När du uppdaterar flera rader med olika värden är det mycket snabbare att använda en bulkuppdatering.

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);

Genom bulkuppdatering kan endast en fråga skickas till servern istället för en fråga för varje rad att uppdatera. Fallen bör innehålla alla möjliga parametrar som tittats upp i WHERE klausulen.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow