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
Innholdsfortegnelse
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å.
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.
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.
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.