MySQL
UPPDATERING
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:
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:
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.