Den här sidan förklarar hur man uppdaterar befintliga data i en MySQL-databas.
Så vi har redan lagt till data i vår databas. Men nu inser vi att vår data innehåller ett misstag. Äpplen har tilldelats ett
UnitId
av 1
— men det här ska vara 2
.
Du kan se detta här:
Inga problem. Vi kommer bara att uppdatera den posten.
UPPDATERING Uttalande
SQL UPDATE
uttalande tillåter oss att uppdatera uppgifterna i vår databas. Vi kan använda detta uttalande för att ändra enhets-ID från 1
till 2
. För att göra detta använder vi WHERE
klausul för att specificera den exakta posten vi behöver uppdatera. Så här:
UPDATE Fruit SET UnitId = 2 WHERE FruitId = 1;
I allmänhet är det tillrådligt när du gör en UPPDATERING
operation, för att ange ID-fältet för posten du försöker uppdatera (eller vad dess primärnyckel är). Detta hjälper till att skydda mot att oavsiktligt uppdatera fel post/er. I det här exemplet visste vi att äpplen hade ett FruitId
av 1
. Men du kanske inte alltid känner till ID:t för posten du försöker uppdatera. I så fall kan du göra något så här:
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple' AND UnitId = 1;
Vi kan följa upp någon av dessa med en SELECT
uttalande och här är resultatet:
Observera att DateUpdated kolumnen har också uppdaterats, även om vi inte angav någon uppdatering för den kolumnen. Detta beror på att när vi skapade tabellen ställde vi in den kolumnen för att uppdateras med aktuellt datum/tid varje gång det gjordes en uppdatering av posten.
Här är koden vi använde när vi skapade den kolumnen:
DateUpdated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Mer specifikt är det ON UPDATE CURRENT_TIMESTAMP
som resulterade i att kolumnen uppdaterades just nu när vi körde UPDATE
uttalande.
Säkra uppdateringar
Vi kunde lika gärna ha konstruerat vår UPPDATERING
kommando som detta (utan OCH UnitId =1
):
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple';
Du kan dock stöta på följande fel om du försöker göra det:
Säkert uppdateringsläge
Om du stöter på ovanstående fel beror det på att din MySQL-anslutning körs i läget Säker uppdatering. Detta hjälper till att förhindra oss från att skriva över stora mängder data av misstag. Faktum är att om vi hade glömt att inkludera WHERE
klausul skulle vi ha uppdaterat varenda post i tabellen!
Ja, att köra följande kod kommer att resultera i att varje post i vår tabell uppdateras till Banan :
UPDATE Fruit SET FruitName = 'Banana'
Så det finns en verklig fördel att få genom att köra i läget Säker uppdatering.
Men om du verkligen behöver utföra den frågan (eller om all din frukt verkligen har förvandlats till bananer), kan du göra något av följande:
- Ändra din fråga så att den innehåller en
NYCKEL
kolumn. Vi gjorde detta i exemplen överst på den här sidan. - Inaktivera läget för säkra uppdateringar.
Inaktivera säkert uppdateringsläge
Om du upptäcker att du behöver utföra en UPPDATERING
operation utan att använda en KEY
kan du alltid inaktivera läget Säkra uppdateringar.
För att inaktivera läget Säkra uppdateringar, kör följande kommando innan du kör UPDATE
uttalande:
set sql_safe_updates = 0;
Det är alltid en bra idé att återställa inställningen till dess tidigare tillstånd när du är klar — särskilt med inställningar som kan ha en utbredd inverkan som den här.
För att aktivera läget Säkra uppdateringar, kör följande:
set sql_safe_updates = 1;
Faktum är att du kan köra allt samtidigt, så här:
set sql_safe_updates = 0; UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple'; select * from Fruit; set sql_safe_updates = 1;
Uppdatera flera fält
Du kan uppdatera flera fält genom att använda ett kommatecken för att separera varje fälttilldelning. Så här:
UPDATE Fruit SET FruitName = 'Red Grapes', Inventory = '11' WHERE FruitId = 5;
Resultat: