Avkoda kommandot SQL UPDATE

Spread the love

Lär dig hur du använder kommandot SQL UPDATE för att uppdatera poster i en databastabell.

Som utvecklare bör du vara bekväm med att arbeta med relationsdatabaser. SQL (eller Structured Query Language) är ett nybörjarvänligt språk som är intuitivt att lära sig och har en enkel syntax. SQL låter dig skapa databasobjekt och fråga relationsdatabastabeller.

Du kan köra SQL-frågor för att skapa, läsa, uppdatera och ta bort poster i en databastabell. Du kanske är bekant med att dessa operationer tillsammans kallas CRUD-operationer.

För att uppdatera posterna som lagras i en databastabell kan du köra kommandot UPDATE i SQL.

I den här handledningen får du lära dig:

  • Syntaxen för kommandot UPDATE
  • Hur man uppdaterar poster baserat på ett specifikt villkor eller flera villkor som är sammankopplade med logiska operatorer
  • Vanlig varning att vara medveten om när du kör kommandot SQL UPDATE

Syntax för kommandot SQL UPDATE

Syntaxen för SQL UPDATE-kommandot är:

UPDATE table_name
SET column = new_value
WHERE condition;

Ovanstående frågeuppdateringskolumn för alla poster där villkoret är sant.

För att uppdatera flera kolumner (eller fält), använd kommandot SQL UPDATE så här:

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

Kom ihåg att i en relationsdatabas:

  • Tabellen representerar en enhet.
  • Raderna i tabellen är posterna och representerar en instans av entiteten.
  • Kolumnerna kallas även för fälten eller attributen. I den här handledningen kommer vi att använda kolumner och fält omväxlande.

SQL UPDATE Kommandoanvändningsexempel

Låt oss nu ta några exempel.

Förutsättningar

Innan du börjar koda:

  • Denna handledning använder SQLite. Så du måste ha SQLite och SQLite Database webbläsare (rekommenderas) för att koda med. Observera att du även kan använda MySQL eller PostgreSQL.
  • Om du vill replikera exemplet behöver du Python och Faker Python-paket också.
  Bästa attackytövervakningen för att känna till din säkerhetsriskexponering

Skapa en databastabell med poster

Om du vill följa med i den här handledningen kan du köra följande kodavsnitt för att skapa och ansluta till en kunddatabas customer_db.db. Observera att vi använder Faker Python-biblioteket för att generera syntetisk data för att infoga i kundtabellen:

# 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()

📑 För att den här koden ska fungera utan fel, se till att du har Python 3.7 (eller en senare version) och Förfalskare installerat i din utvecklingsmiljö. Du kan installera Faker Python-paketet med hjälp av pip:

pip install faker

Om du redan har en databas som du kan ansluta till och en databastabell som du kan fråga efter, kan du också använda den efter önskemål.

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

Kundtabellen har följande fält:

  • kund-ID: kund-ID är den primära nyckeln som hjälper oss att unikt identifiera en post i en databastabell.
  • namn: Namnet på kunden
  • stad: Staden de tillhör.
  • email: Deras e-postadress.
  • num_orders: Antalet beställningar de har lagt.
  • rabatt: Rabattprocenten, ett heltal med standardvärdet 2. Eftersom rabattfältet har ett standardvärde behöver vi inte infoga ett värde för det när vi fyller i databastabellen.

📝 Du kan köra frågorna och visa resultaten med SQLites kommandoradsklient. Eller så kan du använda SQLite-databaswebbläsaren.

Jag kommer att presentera utdata från SQLite DB Browser eftersom de är lätta att tolka.

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

SELECT * FROM customers;

I praktiken bör du undvika att använda SELECT * om det inte är nödvändigt. Men för det här exemplet kommer vi att använda det eftersom vi bara har 15 poster och inte många fält.

  Topp 9 bästa GPS-spårare

Uppdatering av poster baserat på ett enda tillstånd

Nu när vi vet hur vår tabell ser ut, låt oss köra några UPDATE-frågor för att uppdatera posterna baserat på det nödvändiga villkoret.

📋 Obs: Efter att ha kört UPDATE-satserna kör vi SELECT * FROM-kunder för att se de uppdaterade posterna.

Uppdatering av ett enskilt fält

Låt oss först uppdatera postens stadsfält med customerID=7:

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

Låt oss välja alla kolumner och poster från kundtabellen:

SELECT * FROM customers;

Vi ser att Danielle Fords stadsfält (kund-ID=7) har uppdaterats.

Uppdatering av flera fält

I det föregående exemplet uppdaterade vi bara ett fält, nämligen postorten som motsvarar kund-ID 7. Men vi kan också uppdatera flera fält med hjälp av syntaxen vi har lärt oss.

Här uppdaterar vi både stad och e-postfält som motsvarar kund-ID 1:

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

Därefter kör vi:

SELECT * FROM customers;

Och här är resultatet:

Uppdatering av flera poster

Eftersom vi använde kund-ID, som är den primära nyckeln som unikt identifierar en kundpost, uppdaterade de frågor som vi har kört hittills endast en av posterna.

Men om villkoret är sant för mer än en post i tabellen uppdateras alla motsvarande poster när kommandot SQL update körs.

Ta den här frågan till exempel:

UPDATE customers 
SET discount=10
WHERE num_orders > 170;

Kör nu denna fråga:

SELECT * FROM customers;

Här är utgången:

Om du kör ovanstående SQL-uppdateringskommando ändras tre poster. De har alla num_orders större än 170 och har nu ett rabattvärde på 10.

Uppdatering av poster baserat på flera villkor

Hittills hade WHERE-satsen ett enkelt villkor, men det är vanligt att filtreringskriteriet har flera villkor sammankopplade av logiska operatorer.

  Hur man visar, döljer eller ändrar storlek på miniatyrbilder i PowerPoint

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

  • stad LIKE ’New%’: detta villkor kontrollerar och inkluderar de poster där stadsfältet börjar med New, och
  • num_orders > 100 filter baserat på antalet order för att endast inkludera de poster för vilka antalet order är större än 100.

UPDATE-satsen ser ut så här:

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

Lägg märke till att vi nu har två villkor i WHERE-satsen – sammankopplade av den logiska AND-operatorn. Och endast de poster för vilka båda villkoren gäller uppdateras.

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

SELECT * FROM customers;

Som framgår av resultatet uppdateras rabattfältet för de poster för vilka båda ovanstående villkor gäller:

Vanlig varning när du använder kommandot SQL UPDATE

I alla UPDATE-satser som körts hittills inkluderade vi WHERE-satsen.

Du vill till exempel uppdatera rabatten till 25 för en viss kund. Och i din uppdateringsfråga glömmer du att inkludera WHERE-satsen med kund-ID:t att filtrera på:

UPDATE customers
SET DISCOUNT=25;

Kör nu:

SELECT * FROM customers;

Du kommer att se att alla poster i tabellen är uppdaterade. Detta kanske inte är det beteende du vill ha.

⚠ Så kom ihåg att inkludera WHERE-satsen när du vill uppdatera en delmängd av poster baserat på ett villkor. Om du vill uppdatera ett visst fält för alla poster kan du utelämna WHERE-satsen.

Säg i det här exemplet att du har en Black Friday-rea på gång och att du vill erbjuda alla dina kunder en rabatt på 25 %. Då är det meningsfullt att köra ovanstående fråga.

Slutsats

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

  • När du vill uppdatera poster i en databastabell kan du använda kommandot SQL UPDATE.
  • SQL UPDATE-satsen inkluderar vanligtvis WHERE-satsen med villkoret som bestämmer vilken delmängd av poster (tabellrader) som ska uppdateras.
  • Om du utelämnar WHERE-satsen i UPDATE-satsen uppdateras alla poster. Så du måste vara försiktig så att du inte utelämnar WHERE-satsen om uppdatering av alla rader i tabellen inte är det önskade beteendet.

Kolla sedan in detta SQL-fuskblad för snabb referens.