Avkoda kommandot SQL UPDATE

By rik

Utforska hur du använder SQL-kommandot UPDATE för att modifiera data i en databas.

Som programmerare är det essentiellt att ha kunskap om relationsdatabaser. SQL (Structured Query Language) är ett lättillgängligt språk, intuitivt att lära sig, med en okomplicerad struktur. Med SQL kan du forma databasstrukturer och ställa frågor till databastabeller.

SQL-frågor tillåter dig att skapa, läsa, ändra och radera poster i en databas. Dessa operationer är kollektivt kända som CRUD-operationer.

För att justera informationen i en databastabell används SQL-kommandot UPDATE.

I denna guide kommer du att lära dig:

  • Strukturen för kommandot UPDATE.
  • Hur du uppdaterar poster baserat på specifika eller kombinerade villkor med logiska operatorer.
  • En viktig försiktighetsåtgärd att beakta när du kör SQL-kommandot UPDATE.

SQL UPDATE Kommandosyntax

Grundsyntaxen för SQL UPDATE ser ut så här:

UPDATE tabell_namn
    SET kolumn = nytt_värde
    WHERE villkor;
    

Denna fråga uppdaterar den angivna kolumnen för alla rader som matchar villkoret.

För att uppdatera flera kolumner, använd följande syntax:

UPDATE tabell_namn
    SET kolumn_1 = nytt_värde_1, kolumn_2 = nytt_värde_2, ..., kolumn_k = nytt_värde_k
    WHERE villkor;
    

Kom ihåg att i en relationsdatabas:

  • En tabell representerar en enhet.
  • Raderna i tabellen är poster, som representerar en instans av enheten.
  • Kolumnerna kallas även för fält eller attribut. I denna genomgång använder vi kolumner och fält som synonymer.

Exempel på användning av SQL UPDATE

Låt oss nu granska några exempel.

Förberedelser

Innan du sätter igång med kodningen:

  • Vi kommer att använda SQLite i denna guide. Du behöver alltså SQLite och SQLite Database Browser (rekommenderas) för att följa med. Du kan också använda MySQL eller PostgreSQL.
  • Om du vill återskapa exemplen behöver du också Python och Faker Python-paketet.

Skapa en databastabell med poster

För att följa guiden, kör följande kod för att skapa och ansluta till en kunddatabas (customer_db.db). Vi använder Faker Python-biblioteket för att generera data för att lägga in i kundtabellen:


# main.py

import sqlite3
from faker import Faker
import random

# Anslut till databasen
conn = sqlite3.connect('customer_db.db')
cur = conn.cursor()

# Skapa databastabell
cur.execute('''CREATE TABLE customers (
                  customerID INTEGER PRIMARY KEY,
                  name TEXT,
                  city TEXT,
                  email TEXT,
                  num_orders INTEGER,
                  discount INTEGER DEFAULT 2)''')


# Skapa ett Faker-objekt
fake = Faker()
Faker.seed(42)

for _ in range(15):
    name = fake.name()
    city = fake.city()
    d = fake.domain_name()
    email = f"{name[:2]}.{city[:2]}@{d}"
    num_orders = random.choice(range(200))
    cur.execute('INSERT INTO customers (name, city, email, num_orders) 
    VALUES (?,?,?,?)', (name,city,email,num_orders))

# Bekräfta transaktionen
conn.commit()
cur.close()
conn.close()

📑 Se till att du har Python 3.7 (eller senare) och Faker installerat i din utvecklingsmiljö. Du kan installera Faker med pip:

pip install faker

Om du redan har en databas och en tabell du kan använda, är det också okej.

Kör vår första SQL-fråga

Kundtabellen har följande kolumner:

  • customerID: Primärnyckel för att unikt identifiera en post.
  • name: Kundens namn.
  • city: Kundens hemstad.
  • email: Kundens e-postadress.
  • num_orders: Antal lagda beställningar.
  • discount: Rabattprocent, ett heltal med standardvärdet 2. Vi behöver inte ange ett värde för rabatt när vi fyller i tabellen.

📝 Du kan köra frågorna med SQLites kommandoradsverktyg, eller använda SQLite Database Browser.

Vi visar resultaten från SQLite DB Browser för enklare tolkning.

Kör följande fråga för att hämta alla poster i kundtabellen:

SELECT * FROM customers;

I normalfallet bör du undvika SELECT * om det inte är nödvändigt. Men för detta exempel fungerar det då tabellen bara har 15 poster och få kolumner.

Uppdatera poster baserat på ett villkor

Nu när vi sett hur vår tabell ser ut, låt oss utföra några UPDATE-frågor för att ändra poster baserat på specifika villkor.

📋 Efter att ha utfört UPDATE-satserna, kör vi SELECT * FROM customers för att se de uppdaterade posterna.

Uppdatera ett enskilt fält

Låt oss först ändra stadsfältet för posten med customerID=7:

UPDATE customers
    SET city='Codeshire'
    WHERE customerID=7;

Hämta alla kolumner och poster från kundtabellen:

SELECT * FROM customers;

Vi ser att stadsfältet för Danielle Ford (kund-ID=7) har ändrats.

Uppdatera flera fält

I föregående exempel ändrade vi bara ett fält, orten för kund-ID 7. Vi kan även uppdatera flera fält med samma syntax.

Här ändrar vi både stad och e-post för kund-ID 1:

UPDATE customers
    SET city='East Carlisle', email="[email protected]"
    WHERE customerID=1;

Sedan kör vi:

SELECT * FROM customers;

Här är resultatet:

Uppdatera flera poster

Vi har hittills använt customerID, som är en primärnyckel för att unikt identifiera en kundpost. Därför har våra frågor bara uppdaterat en post.

Om villkoret stämmer för mer än en post, kommer SQL-kommandot UPDATE att uppdatera alla matchande poster.

Se på denna fråga:

UPDATE customers 
    SET discount=10
    WHERE num_orders > 170;

Kör nu denna fråga:

SELECT * FROM customers;

Här är utskriften:

Den här frågan ändrar tre poster, alla med num_orders större än 170, och sätter nu discount till 10.

Uppdatera poster baserat på flera villkor

Hittills har WHERE-satsen använt ett enkelt villkor. Men det är vanligt att ha flera villkor länkade med logiska operatorer.

För att förstå detta, låt oss sätta rabatten till 5 baserat på två villkor:

  • city LIKE 'New%': Kontrollerar och inkluderar poster där stadsfältet börjar med ”New”.
  • num_orders > 100: Filtrerar baserat på antalet beställningar, så att endast poster med antalet beställningar större än 100 inkluderas.

UPDATE-satsen ser ut så här:

UPDATE customers
    SET DISCOUNT=5
    WHERE city LIKE 'New%' AND num_orders>100;

Observera att vi nu har två villkor i WHERE-satsen – länkade med den logiska operatorn AND. Endast poster som uppfyller båda villkoren uppdateras.

Kör nu den här frågan och observera resultatet:

SELECT * FROM customers;

Som resultatet visar, uppdateras rabattfältet för de poster som matchar båda villkoren ovan:

Varning vid användning av SQL UPDATE

I alla UPDATE-satser vi kört hittills har vi använt WHERE-satsen.

Låt oss säga att du vill uppdatera rabatten till 25 för en viss kund. I din uppdateringsfråga glömmer du att inkludera WHERE-satsen med kund-ID för att filtrera:

UPDATE customers
    SET DISCOUNT=25;

Om du nu kör:

SELECT * FROM customers;

Ser du att alla poster i tabellen är uppdaterade. Det kanske inte är vad du förväntade dig.

⚠ Kom ihåg att inkludera WHERE-satsen när du bara vill uppdatera en delmängd poster. Om du vill uppdatera ett fält för alla poster kan du utelämna WHERE-satsen.

Till exempel, om du har ett Black Friday-erbjudande och vill ge alla kunder 25% rabatt, så är det vettigt att köra frågan ovan.

Slutsats

Här är en sammanfattning av vad du har lärt dig:

  • Använd SQL-kommandot UPDATE för att ändra poster i en databastabell.
  • En UPDATE-sats inkluderar vanligtvis en WHERE-sats för att specificera vilka rader som ska uppdateras.
  • Om du utelämnar WHERE-satsen i UPDATE-satsen uppdateras alla poster. Var noga med att inte göra det om det inte är avsikten.

Ta sedan en titt på detta SQL-fuskblad för snabb referens.