sql >> Database teknologi >  >> RDS >> Mysql

Opdater data i en MySQL-database

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:


  1. Hvad er praktiske forskelle mellem 'REPLACE' og 'INSERT ... ON DUPLICATE KEY UPDATE' i MySQL?

  2. Indsæt flere rækker med en MySQL-forespørgsel

  3. Krøllede seler i T-SQL

  4. Sådan fungerer SEC_TO_TIME() i MariaDB