Dekoding av SQL UPDATE-kommandoen

Lær hvordan du bruker SQL UPDATE-kommandoen til å oppdatere poster i en databasetabell.

Som utvikler bør du være komfortabel med å jobbe med relasjonsdatabaser. SQL (eller Structured Query Language) er et nybegynnervennlig språk som er intuitivt å lære og har en enkel syntaks. SQL lar deg lage databaseobjekter og spørre relasjonsdatabasetabeller.

Du kan kjøre SQL-spørringer for å opprette, lese, oppdatere og slette poster i en databasetabell. Du er kanskje kjent med at disse operasjonene er samlet kalt CRUD-operasjoner.

For å oppdatere postene som er lagret i en databasetabell, kan du kjøre UPDATE-kommandoen i SQL.

I denne opplæringen lærer du:

  • Syntaksen til UPDATE-kommandoen
  • Hvordan oppdatere poster basert på en spesifikk tilstand eller flere forhold lenket sammen ved hjelp av logiske operatorer
  • Vanlig advarsel å være oppmerksom på når du kjører SQL UPDATE-kommandoen

Syntaks for SQL UPDATE-kommandoen

Syntaksen til SQL UPDATE-kommandoen er:

UPDATE table_name
SET column = new_value
WHERE condition;

Spørringsoppdateringskolonnen ovenfor for alle poster der betingelsen er sann.

For å oppdatere flere kolonner (eller felt), bruk SQL UPDATE-kommandoen slik:

UPDATE table_name
SET column_1 = new_value_1, column_2 = new_value_2, ..., column_k = new_value_k
WHERE condition;

Husk at i en relasjonsdatabase:

  • Tabellen representerer en enhet.
  • Radene i tabellen er postene og representerer en forekomst av enheten.
  • Kolonnene kalles også feltene eller attributtene. I denne opplæringen vil vi bruke kolonner og felt om hverandre.

SQL UPDATE-kommandobrukseksempler

La oss nå ta noen eksempler.

Forutsetninger

Før du begynner å kode:

  • Denne opplæringen bruker SQLite. Så du må ha SQLite og SQLite Database-nettleser (anbefalt) for å kode med. Merk at du også kan bruke MySQL eller PostgreSQL.
  • Hvis du vil gjenskape eksemplet, trenger du Python og Faker Python-pakke også.
  De 8 beste verktøyene for e-posttesting å bruke for dine mailer-kampanjer

Opprette en databasetabell med poster

Hvis du vil kode med til denne opplæringen, kan du kjøre følgende kodebit for å opprette og koble til en kundedatabase customer_db.db. Legg merke til at vi bruker Faker Python-biblioteket til å generere syntetiske data for å sette inn i kundetabellen:

# main.py

import sqlite3
from faker import Faker
import random

# connect to the db
conn = sqlite3.connect('customer_db.db')
cur = conn.cur()

# create a database table
cur.execute('''CREATE TABLE customers (
                  customerID INTEGER PRIMARY KEY,
                  name TEXT,
                  city TEXT,
                  email TEXT,
                  num_orders INTEGER,
                  discount INTEGER DEFAULT 2)''')


# create a Faker object 
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))
    db_cursor.execute('INSERT INTO customers (name, city, email, num_orders) 
    VALUES (?,?,?,?)', (name,city,email,num_orders))

# commit the transaction 
conn.commit()
cur.close()
conn.close()

📑 For at denne koden skal fungere uten feil, sørg for at du har Python 3.7 (eller en nyere versjon) og Faker installert i utviklingsmiljøet ditt. Du kan installere Faker Python-pakken ved å bruke pip:

pip install faker

Hvis du allerede har en database du kan koble til og en databasetabell som du kan søke etter, kan du også bruke den som foretrukket.

Kjører vår første SQL-spørring

Kundetabellen har følgende felt:

  • kunde-ID: kunde-ID er primærnøkkelen som hjelper oss med å identifisere en post i en databasetabell.
  • navn: Navnet på kunden
  • by: Byen de tilhører.
  • e-post: E-postadressen deres.
  • num_orders: Antall bestillinger de har lagt inn.
  • rabatt: Rabattprosenten, et heltall med standardverdien 2. Fordi rabattfeltet har en standardverdi, trenger vi ikke å sette inn en verdi for det når vi fyller ut databasetabellen.

📝 Du kan kjøre spørringene og se resultatene ved å bruke SQLite-kommandolinjeklienten. Eller du kan bruke SQLite-databasenettleseren.

Jeg vil presentere utdataene fra SQLite DB-nettleseren da de er enkle å tolke.

  Tjen penger på ferdighetene dine ved å selge nettkurs ved hjelp av LearnWorlds

Kjør følgende spørring for å få alle postene i kundetabellen:

SELECT * FROM customers;

I praksis bør du unngå å bruke SELECT * med mindre det er nødvendig. Men for dette eksempelet vil vi bruke det siden vi bare har 15 poster og ikke mange felt.

Oppdatering av poster basert på en enkelt tilstand

Nå som vi vet hvordan tabellen vår ser ut, la oss kjøre noen få OPPDATERINGSspørringer for å oppdatere postene basert på den nødvendige tilstanden.

📋 Merk: Etter å ha kjørt UPDATE-setningene, kjører vi SELECT * FROM-kunder for å se de oppdaterte postene.

Oppdatering av et enkelt felt

La oss først oppdatere postens byfelt med customerID=7:

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

La oss velge alle kolonnene og postene fra kundetabellen:

SELECT * FROM customers;

Vi ser at byfeltet til Danielle Ford (kundeID=7) er oppdatert.

Oppdatering av flere felt

I det forrige eksemplet oppdaterte vi bare ett felt, nemlig poststedet som tilsvarer kunde-ID 7. Men vi kan også oppdatere flere felt ved å bruke syntaksen vi har lært.

Her oppdaterer vi både byen og e-postfeltet som tilsvarer kundeID 1:

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

Deretter kjører vi:

SELECT * FROM customers;

Og her er utgangen:

Oppdatering av flere poster

Fordi vi brukte kunde-ID-en, som er primærnøkkelen som unikt identifiserer en kundepost, oppdaterte spørringene vi har kjørt så langt, bare én av postene.

Men hvis betingelsen er sann for mer enn én post i tabellen, oppdateres alle de tilsvarende postene ved å kjøre SQL-oppdateringskommandoen.

Ta dette spørsmålet for eksempel:

UPDATE customers 
SET discount=10
WHERE num_orders > 170;

Kjør nå denne spørringen:

SELECT * FROM customers;

Her er utgangen:

Å kjøre SQL-oppdateringskommandoen ovenfor endrer tre poster. De har alle num_orders større enn 170 og har nå en rabattverdi på 10.

Oppdatering av poster basert på flere forhold

Så langt hadde WHERE-klausulen en enkel betingelse, men det er vanlig at filtreringskriteriet har flere forhold lenket sammen av logiske operatorer.

  8 viktige tips for å sikre nettapplikasjonsserver

For å forstå dette, la oss sette rabatten til 5 basert på to forhold:

  • by LIKE «New%»: denne betingelsen sjekker og inkluderer de postene der byfeltet starter med New, og
  • num_orders > 100 filtre basert på antall bestillinger for å inkludere bare de postene der antallet bestillinger er større enn 100.

UPDATE-setningen ser slik ut:

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

Legg merke til at vi nå har to betingelser i WHERE-leddet – lenket sammen av den logiske AND-operatoren. Og bare de postene som begge forholdene gjelder for, oppdateres.

Kjør deretter denne spørringen og observer utdataene:

SELECT * FROM customers;

Som vist i utdataene, oppdateres rabattfeltet for de postene der begge betingelsene ovenfor gjelder:

Vanlig advarsel når du bruker SQL UPDATE-kommandoen

I alle UPDATE-setningene som er utført så langt, inkluderte vi WHERE-klausulen.

Du vil for eksempel oppdatere rabatten til 25 for en bestemt kunde. Og i ypur-oppdateringsspørringen glemmer du å inkludere WHERE-klausulen med kunde-IDen du skal filtrere på:

UPDATE customers
SET DISCOUNT=25;

Kjør nå:

SELECT * FROM customers;

Du vil se at alle postene i tabellen er oppdatert. Dette er kanskje ikke oppførselen du ønsker.

⚠ Så husk å inkludere WHERE-klausulen når du vil oppdatere et undersett av poster basert på en betingelse. Hvis du vil oppdatere et bestemt felt for alle postene, kan du utelate WHERE-leddet.

I dette eksemplet, si at du har Black Friday-salget nærmer seg, og du vil tilby alle kundene dine en rabatt på 25 %. Da vil det være fornuftig å kjøre søket ovenfor.

Konklusjon

Her er et sammendrag av det du har lært:

  • Når du vil oppdatere poster i en databasetabell, kan du bruke kommandoen SQL UPDATE.
  • SQL UPDATE-setningen inkluderer vanligvis WHERE-leddet med betingelsen som bestemmer undersettet av poster (radene i tabellen) som skal oppdateres.
  • Å utelate WHERE-leddet i UPDATE-setningen oppdaterer alle postene. Så du må være forsiktig med å utelate WHERE-klausulen hvis oppdatering av alle radene i tabellen ikke er ønsket oppførsel.

Deretter kan du sjekke ut dette SQL-juksearket for rask referanse.