sql >> Databasteknik >  >> RDS >> Mysql

Uppdatera data i en MySQL-databas

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:


  1. Hur man får ålder i år, månader och dagar med Oracle

  2. Hur man skriver ut flera rapporter med streckkoder \ eller flera streckkoder i en rapport

  3. Hur skriver man ett REST API?

  4. Vad är realtidsappar?