Denne side forklarer, hvordan man opdaterer eksisterende data i en MySQL-database.
Så vi har allerede tilføjet data til vores database. Men nu indser vi, at vores data indeholder en fejl. Æbler er blevet tildelt et
UnitId
af 1
— men dette skal være 2
.
Du kan se dette her:
Intet problem. Vi vil lige opdatere den rekord.
OPDATERING Erklæring
SQL OPDATERING
erklæring giver os mulighed for at opdatere dataene i vores database. Vi kan bruge denne erklæring til at ændre enheds-id'et fra 1
til 2
. For at gøre dette bruger vi WHERE
klausul for at specificere den nøjagtige post, vi skal opdatere. Sådan:
UPDATE Fruit SET UnitId = 2 WHERE FruitId = 1;
Generelt er det tilrådeligt, når du laver en OPDATERING
operation for at angive ID-feltet for den post, du forsøger at opdatere (eller hvad dens primære nøgle er). Dette hjælper med at beskytte mod utilsigtet opdatering af de forkerte poster. I dette eksempel vidste vi, at æbler havde et FruitId
af 1
. Men du kender måske ikke altid ID'et for den post, du forsøger at opdatere. I så fald kunne du gøre noget som dette:
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple' AND UnitId = 1;
Vi kan følge en af dem op med en SELECT
erklæring, og her er resultatet:
Bemærk, at DateUpdated kolonne er også blevet opdateret, selvom vi ikke har angivet en opdatering for den kolonne. Dette er fordi, da vi oprettede tabellen, satte vi den kolonne til at blive opdateret med den aktuelle dato/klokkeslæt, hver gang der var en opdatering af posten.
Her er koden, vi brugte, da vi oprettede den kolonne:
DateUpdated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Mere specifikt er det ON UPDATE CURRENT_TIMESTAMP
hvilket resulterede i, at kolonnen blev opdateret lige nu, da vi kørte UPDATE
erklæring.
Sikker opdatering
Vi kunne lige så nemt have konstrueret vores OPDATERING
kommando som denne (uden OG UnitId =1
):
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple';
Du kan dog støde på følgende fejl, hvis du prøver at gøre det:
Sikker opdateringstilstand
Hvis du støder på ovenstående fejl, er det fordi din MySQL-forbindelse kører i tilstanden Safe Updates. Dette hjælper med at forhindre os i at overskrive store mængder data ved et uheld. Faktisk, hvis vi havde glemt at inkludere WHERE
klausul ville vi have opdateret hver enkelt post i tabellen!
Ja, kørsel af følgende kode vil resultere i, at hver post i vores tabel bliver opdateret til Banan :
UPDATE Fruit SET FruitName = 'Banana'
Så der er en reel fordel ved at køre i sikker opdateringstilstand.
Men hvis du virkelig har brug for at udføre den forespørgsel (eller hvis al din frugt virkelig er blevet til bananer), kan du gøre et af følgende:
- Rediger din forespørgsel til at inkludere en
KEY
kolonne. Det gjorde vi i eksemplerne øverst på denne side. - Deaktiver tilstanden Sikker opdatering.
Deaktiver tilstanden Sikker opdatering
Hvis du opdager, at du skal udføre en OPDATERING
handling uden at bruge en KEY
felt, kan du altid deaktivere tilstanden Sikker opdatering.
For at deaktivere tilstanden Sikker opdatering skal du køre følgende kommando, før du kører din UPDATE
erklæring:
set sql_safe_updates = 0;
Det er altid en god idé at gendanne indstillingen til dens tidligere tilstand, når du er færdig - især med indstillinger, der kan have en udbredt indflydelse som denne.
For at aktivere tilstanden Sikker opdatering skal du køre følgende:
set sql_safe_updates = 1;
Faktisk kunne du køre alt på samme tid, sådan her:
set sql_safe_updates = 0; UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple'; select * from Fruit; set sql_safe_updates = 1;
Opdater flere felter
Du kan opdatere flere felter ved at bruge et komma til at adskille hver felttildeling. Sådan:
UPDATE Fruit SET FruitName = 'Red Grapes', Inventory = '11' WHERE FruitId = 5;
Resultat: