Az SQL UPDATE parancs dekódolása

Ismerje meg, hogyan használhatja az SQL UPDATE parancsot az adatbázistábla rekordjainak frissítésére.

Fejlesztőként kényelmesen kell dolgoznia relációs adatbázisokkal. Az SQL (vagy Structured Query Language) egy kezdőbarát nyelv, amely intuitívan tanulható és egyszerű szintaxissal rendelkezik. Az SQL lehetővé teszi adatbázis-objektumok létrehozását és relációs adatbázistáblák lekérdezését.

SQL-lekérdezések futtatásával rekordokat hozhat létre, olvashat, frissíthet és törölhet egy adatbázistáblában. Talán ismeri, hogy ezeket a műveleteket összefoglalóan CRUD műveleteknek nevezik.

Az adatbázistáblában tárolt rekordok frissítéséhez futtassa az UPDATE parancsot SQL-ben.

Ebből az oktatóanyagból megtudhatja:

  • Az UPDATE parancs szintaxisa
  • Rekordok frissítése egy adott feltétel vagy több feltétel alapján, logikai operátorok segítségével összeláncolva
  • Általános figyelmeztetés, amelyet az SQL UPDATE parancs futtatásakor figyelembe kell venni

Az SQL UPDATE parancs szintaxisa

Az SQL UPDATE parancs szintaxisa a következő:

UPDATE table_name
SET column = new_value
WHERE condition;

A fenti lekérdezés minden olyan rekordhoz frissíti az oszlopot, ahol a feltétel igaz.

Több oszlop (vagy mező) frissítéséhez használja az SQL UPDATE parancsot, például:

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

Emlékezzünk rá, hogy egy relációs adatbázisban:

  • A táblázat egy entitást jelöl.
  • A tábla sorai a rekordok, és az entitás egy példányát jelentik.
  • Az oszlopokat mezőknek vagy attribútumoknak is nevezik. Ebben az oktatóanyagban az oszlopokat és a mezőket felváltva használjuk.

SQL UPDATE parancshasználati példák

Most vegyünk néhány példát.

Előfeltételek

Mielőtt elkezdené a kódolást:

  • Ez az oktatóanyag SQLite-t használ. Tehát szükséged lesz SQLite-re és SQLite adatbázis böngésző (ajánlott) együtt kódolni. Vegye figyelembe, hogy használhatja a MySQL-t vagy a PostgreSQL-t is.
  • Ha meg szeretné replikálni a példát, akkor Python és a Faker Python csomag is.
  Hogyan találja meg kedvenc dalait, előadóit és egyebeket

Adatbázistábla létrehozása rekordokkal

Ha az oktatóanyaggal együtt szeretne kódolni, futtassa a következő kódrészletet a customer_db.db ügyféladatbázis létrehozásához és ahhoz való csatlakozásához. Figyeljük meg, hogy a Faker Python könyvtárat használjuk szintetikus adatok generálására, amelyeket beillesztünk az ügyfelek táblázatába:

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

📑 Ahhoz, hogy ez a kód hibamentesen működjön, győződjön meg arról, hogy Python 3.7 (vagy újabb verzió) van, és Hamisító telepítve van a fejlesztői környezetében. A Faker Python csomagot a pip segítségével telepítheti:

pip install faker

Ha már rendelkezik egy adatbázissal, amelyhez csatlakozhat, és egy adatbázistáblával, amelyet lekérdezhet, akkor azt is használhatja.

Első SQL-lekérdezésünk futtatása

Az ügyfelek tábla a következő mezőket tartalmazza:

  • ügyfélazonosító: Az ügyfélazonosító az elsődleges kulcs, amely segít egyedileg azonosítani egy rekordot az adatbázistáblában.
  • név: Az ügyfél neve
  • város: A város, amelyhez tartoznak.
  • email: Az e-mail címük.
  • num_orders: Az általuk leadott rendelések száma.
  • diszkont: A kedvezmény százaléka, egy egész szám, amelynek alapértelmezett értéke 2. Mivel a diszkont mezőnek van alapértelmezett értéke, nem kell hozzá értéket beszúrnunk az adatbázistábla feltöltésekor.

📝 Az SQLite parancssori kliens segítségével futtathatja a lekérdezéseket és megtekintheti az eredményeket. Vagy használhatja az SQLite adatbázis-böngészőt.

Bemutatom az SQLite DB Browser kimeneteit, mivel azok könnyen értelmezhetők.

  A 8 legjobb faxalkalmazás iPhone-okra 2022-ben

Futtassa a következő lekérdezést, hogy megkapja az összes rekordot az ügyfelek táblájában:

SELECT * FROM customers;

A gyakorlatban kerülje a SELECT * használatát, hacsak nem szükséges. De ebben a példában ezt fogjuk használni, mivel csak 15 rekordunk van, és nem sok mezőnk van.

Rekordok frissítése egyetlen feltétel alapján

Most, hogy tudjuk, hogyan néz ki a táblázatunk, futtassunk néhány UPDATE lekérdezést a rekordok frissítéséhez a szükséges feltétel alapján.

📋 Megjegyzés: Az UPDATE utasítások futtatása után a SELECT * FROM parancsot futtatjuk az ügyfelek számára a frissített rekordok megtekintéséhez.

Egyetlen mező frissítése

Először frissítsük a rekord város mezőjét customerID=7 értékkel:

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

Jelöljük ki az összes oszlopot és rekordot az ügyfelek táblázatából:

SELECT * FROM customers;

Látjuk, hogy Danielle Ford (customerID=7) város mezője frissült.

Több mező frissítése

Az előző példában csak egy mezőt frissítettünk, mégpedig a 7-es ügyfélazonosítónak megfelelő rekord városát. De több mezőt is frissíthetünk a megtanult szintaxis segítségével.

Itt frissítjük a várost és az 1-es ügyfélazonosítónak megfelelő e-mail mezőt is:

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

Ezután futunk:

SELECT * FROM customers;

És íme a kimenet:

Több rekord frissítése

Mivel az ügyfélazonosítót használtuk, amely az elsődleges kulcs, amely egyedileg azonosítja az ügyfélrekordot, az eddig futtatott lekérdezések csak az egyik rekordot frissítették.

Ha azonban a feltétel egynél több rekordra igaz a táblában, akkor az SQL update parancs futtatása frissíti az összes megfelelő rekordot.

Vegyük például ezt a lekérdezést:

UPDATE customers 
SET discount=10
WHERE num_orders > 170;

Most futtassa ezt a lekérdezést:

SELECT * FROM customers;

Íme a kimenet:

A fenti SQL frissítési parancs futtatása három rekordot módosít. Mindegyikük rendeléseinek száma meghaladja a 170-et, és most 10 a kedvezményértékük.

Rekordok frissítése több feltétel alapján

Eddig a WHERE záradéknak volt egy egyszerű feltétele, de gyakori, hogy a szűrési feltétel több feltételt láncolt össze logikai operátorokkal.

  Minden, amit tudnia kell a Gmail biztonságának megerősítéséhez

Ennek megértéséhez állítsuk a kedvezményt 5-re két feltétel alapján:

  • város MINT „Új%”: ez a feltétel ellenőrzi és tartalmazza azokat a rekordokat, ahol a város mező az Új értékkel kezdődik, és
  • rendelések száma > 100 szűrők a rendelések száma alapján, hogy csak azok a rekordok szerepeljenek, amelyeknél a rendelések száma meghaladja a 100-at.

Az UPDATE nyilatkozat így néz ki:

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

Figyeljük meg, hogy most két feltétel van a WHERE záradékban – ezeket a logikai ÉS operátor láncolja össze. És csak azok a rekordok frissülnek, amelyekre mindkét feltétel igaz.

Ezután futtassa ezt a lekérdezést, és figyelje meg a kimenetet:

SELECT * FROM customers;

Amint az a kimeneten látható, azon rekordok kedvezménymezője frissül, amelyekre mindkét fenti feltétel igaz:

Általános figyelmeztetés az SQL UPDATE parancs használatakor

Az összes eddig végrehajtott UPDATE utasításban szerepelt a WHERE záradék.

Például egy adott ügyfél kedvezményét 25-re szeretné frissíteni. Az ypur frissítési lekérdezésében pedig elfelejti megadni a WHERE záradékot az ügyfélazonosítóval együtt, hogy kiszűrje:

UPDATE customers
SET DISCOUNT=25;

Most fuss:

SELECT * FROM customers;

Látni fogja, hogy a táblázat összes rekordja frissül. Lehet, hogy ez nem az Ön által kívánt viselkedés.

⚠ Ezért ne felejtse el szerepeltetni a WHERE záradékot, ha egy feltétel alapján frissíteni szeretné a rekordok egy részét. Ha frissíteni szeretne egy adott mezőt az összes rekordhoz, akkor elhagyhatja a WHERE záradékot.

Ebben a példában tegyük fel, hogy közeleg a Black Friday akció, és minden ügyfelének 25%-os kedvezményt szeretne kínálni. Akkor lesz értelme a fenti lekérdezés futtatásának.

Következtetés

Íme egy összefoglaló a tanultakról:

  • Ha frissíteni szeretné egy adatbázistáblában lévő rekordokat, használhatja az SQL UPDATE parancsot.
  • Az SQL UPDATE utasítás általában tartalmazza a WHERE záradékot azzal a feltétellel, amely meghatározza a frissítendő rekordok (a tábla sorai) részhalmazát.
  • A WHERE záradék elhagyása az UPDATE utasításban az összes rekordot frissíti. Ezért ügyeljen arra, hogy ne hagyja ki a WHERE záradékot, ha a táblázat összes sorának frissítése nem a kívánt viselkedés.

Ezután tekintse meg ezt az SQL csalólapot a gyors hivatkozásért.