Odkryj, jak wykorzystać instrukcję SQL UPDATE do modyfikacji danych w tabelach baz danych.
Jako programista, powinieneś swobodnie poruszać się w świecie relacyjnych baz danych. SQL (Structured Query Language), czyli strukturalny język zapytań, jest przyjazny dla początkujących, intuicyjny w nauce i charakteryzuje się nieskomplikowaną składnią. Umożliwia on tworzenie elementów baz danych oraz formułowanie zapytań do tabel relacyjnych.
Za pomocą SQL możesz wykonywać operacje CRUD (Create, Read, Update, Delete) na rekordach w tabelach. Te operacje pozwalają na tworzenie, odczytywanie, aktualizowanie i usuwanie danych.
Do modyfikacji zapisanych danych w tabeli bazy danych, użyj polecenia UPDATE w SQL.
W tym przewodniku nauczysz się:
- Jak wygląda składnia polecenia UPDATE w SQL.
- Jak zmieniać dane w rekordach, stosując pojedynczy lub złożony warunek, zbudowany z operatorów logicznych.
- Jakie błędy najczęściej pojawiają się podczas pracy z poleceniem UPDATE w SQL i jak ich unikać.
Struktura polecenia UPDATE w SQL
Polecenie UPDATE w języku SQL ma następującą budowę:
UPDATE nazwa_tabeli SET nazwa_kolumny = nowa_wartość WHERE warunek;
Podane zapytanie modyfikuje zawartość kolumny we wszystkich rekordach, które spełniają określony warunek.
Aby dokonać zmian w kilku kolumnach (polach), zastosuj polecenie UPDATE w SQL w poniższy sposób:
UPDATE nazwa_tabeli SET nazwa_kolumny_1 = nowa_wartość_1, nazwa_kolumny_2 = nowa_wartość_2, ..., nazwa_kolumny_k = nowa_wartość_k WHERE warunek;
Warto przypomnieć, że w relacyjnej bazie danych:
- Tabela jest reprezentacją bytu.
- Wiersze tabeli, czyli rekordy, są instancjami tego bytu.
- Kolumny, inaczej pola lub atrybuty, określają właściwości bytu. W tym artykule będziemy używać zamiennie terminów kolumny i pola.
Przykłady zastosowania polecenia UPDATE w SQL
Przejdźmy teraz do praktycznych przykładów.
Wymagania wstępne
Zanim rozpoczniesz kodowanie, upewnij się, że:
- W tym poradniku używamy SQLite. Upewnij się, że masz zainstalowane SQLite oraz przeglądarkę baz danych SQLite (zalecana) do pracy z kodem. Możesz również wykorzystać MySQL lub PostgreSQL.
- Jeśli chcesz odtworzyć prezentowane przykłady, potrzebujesz także Pythona i biblioteki Faker dla Pythona.
Tworzenie tabeli z danymi
Jeżeli chcesz pisać kod razem z nami, skorzystaj z poniższego fragmentu kodu, który utworzy i połączy się z bazą danych o nazwie customer_db.db. Zauważ, że do wygenerowania sztucznych danych, które zostaną umieszczone w tabeli customers, używamy biblioteki Faker:
# main.py import sqlite3 from faker import Faker import random # nawiązanie połączenia z bazą danych conn = sqlite3.connect('customer_db.db') cur = conn.cursor() # tworzenie tabeli cur.execute('''CREATE TABLE customers ( customerID INTEGER PRIMARY KEY, name TEXT, city TEXT, email TEXT, num_orders INTEGER, discount INTEGER DEFAULT 2)''') # inicjalizacja generatora danych Faker fake = Faker() Faker.seed(42) for _ in range(15): name = fake.name() city = fake.city() domain = fake.domain_name() email = f"{name[:2]}.{city[:2]}@{domain}" num_orders = random.choice(range(200)) cur.execute('INSERT INTO customers (name, city, email, num_orders) \ VALUES (?,?,?,?)', (name,city,email,num_orders)) # zatwierdzenie transakcji i zamknięcie połączenia conn.commit() cur.close() conn.close()
📑 Aby kod zadziałał bez problemów, upewnij się, że masz zainstalowanego Pythona w wersji 3.7 lub nowszej oraz bibliotekę Faker. Możesz ją zainstalować za pomocą pip:
pip install faker
Jeśli masz już bazę danych i tabelę, którą możesz wykorzystać, możesz śmiało z niej skorzystać.
Pierwsze zapytanie SQL
Tabela customers ma następujące pola:
- customerID: Unikatowy identyfikator klienta, który jest kluczem głównym.
- name: Imię klienta.
- city: Miasto, w którym mieszka klient.
- email: Adres e-mail klienta.
- num_orders: Liczba złożonych zamówień.
- discount: Domyślny rabat, ustawiony na 2 (wartość całkowita). Wartość domyślna dla pola discount sprawia, że nie trzeba podawać jego wartości podczas dodawania danych do tabeli.
📝 Zapytania możesz uruchamiać w konsoli SQLite lub za pomocą przeglądarki baz danych SQLite.
Poniżej prezentuję wyniki z przeglądarki baz danych SQLite, która ułatwia interpretację danych.
Wykonaj poniższe zapytanie, aby wyświetlić wszystkie rekordy z tabeli customers:
SELECT * FROM customers;
W rzeczywistych sytuacjach unikaj polecenia SELECT *, chyba że jest to absolutnie konieczne. W tym przypadku użyjemy go, ponieważ nasza tabela zawiera tylko 15 rekordów i kilka kolumn.
Aktualizacja rekordów na podstawie pojedynczego warunku
Teraz, gdy znamy strukturę tabeli, wykonajmy kilka zapytań UPDATE, aby zaktualizować dane zgodnie z określonym warunkiem.
📋 Uwaga: Po każdym poleceniu UPDATE wykonamy zapytanie SELECT * FROM customers, aby zobaczyć zmienione rekordy.
Zmiana wartości jednego pola
Zacznijmy od aktualizacji pola city rekordu o identyfikatorze customerID=7:
UPDATE customers SET city='Codeshire' WHERE customerID=7;
Wyświetlmy wszystkie kolumny i rekordy z tabeli customers:
SELECT * FROM customers;
Zauważ, że pole city dla Danielle Ford (customerID=7) zostało zmienione.
Modyfikacja kilku pól
W poprzednim przykładzie zmieniliśmy tylko jedno pole – city dla rekordu o identyfikatorze 7. Możemy również modyfikować wiele pól jednocześnie, korzystając z poznanej składni.
W tym przykładzie zmieniamy jednocześnie pola city i email dla rekordu o customerID równym 1:
UPDATE customers SET city='East Carlisle',email="[email protected]" WHERE customerID=1;
Następnie wykonaj:
SELECT * FROM customers;
Oto wynik:
Aktualizacja wielu rekordów
Do tej pory, dzięki użyciu klucza głównego customerID, który jednoznacznie identyfikuje rekord, aktualizowaliśmy tylko jeden wiersz tabeli.
Jednak, jeśli warunek w klauzuli WHERE zostanie spełniony przez więcej niż jeden rekord, wszystkie one zostaną zmodyfikowane.
Oto przykład takiego zapytania:
UPDATE customers SET discount=10 WHERE num_orders > 170;
Teraz wykonaj to zapytanie:
SELECT * FROM customers;
Oto rezultat:
Powyższa instrukcja SQL zmodyfikowała trzy rekordy. Wszystkie, które miały wartość num_orders większą niż 170, mają teraz rabat równy 10.
Aktualizacja danych na podstawie wielu warunków
Do tej pory w klauzuli WHERE używaliśmy prostych warunków, ale często zdarza się, że potrzebujemy kryteriów filtrujących, które łączą wiele warunków za pomocą operatorów logicznych.
Dla lepszego zrozumienia, ustawmy rabat na 5, bazując na dwóch warunkach:
- city LIKE 'New%’: Ten warunek wyszukuje rekordy, których pole city zaczyna się od słowa „New”.
- num_orders > 100: Ten warunek odfiltrowuje rekordy, w których liczba zamówień jest większa niż 100.
Polecenie UPDATE ma następującą postać:
UPDATE customers SET DISCOUNT=5 WHERE city LIKE 'New%' AND num_orders>100;
Zwróć uwagę, że w klauzuli WHERE występują teraz dwa warunki, połączone operatorem AND. Aktualizowane są tylko te rekordy, które spełniają oba warunki.
Uruchom teraz zapytanie i sprawdź wynik:
SELECT * FROM customers;
Jak widać na wyjściu, pole rabat zostało zmienione tylko w tych rekordach, które spełniają oba powyższe warunki:
Najczęstsze błędy podczas pracy z poleceniem UPDATE w SQL
W dotychczasowych przykładach zawsze używaliśmy klauzuli WHERE w poleceniach UPDATE.
Załóżmy, że chcesz zmienić rabat na 25 dla konkretnego klienta. W zapytaniu UPDATE jednak zapominasz o dodaniu klauzuli WHERE z customerID:
UPDATE customers SET DISCOUNT=25;
Następnie wykonaj:
SELECT * FROM customers;
Zauważysz, że wszystkie rekordy w tabeli zostały zmodyfikowane. Takie zachowanie prawdopodobnie nie jest pożądane.
⚠ Pamiętaj więc, aby dodawać klauzulę WHERE, gdy chcesz aktualizować tylko wybrany podzbiór rekordów na podstawie warunku. Jeśli chcesz zmienić wartość konkretnej kolumny we wszystkich rekordach, możesz pominąć klauzulę WHERE.
W naszym przykładzie, gdyby zbliżał się Black Friday i chciałbyś zaoferować wszystkim klientom rabat 25%, pominięcie klauzuli WHERE byłoby właściwe.
Podsumowanie
Oto krótkie podsumowanie najważniejszych informacji:
- Do modyfikacji danych w tabeli bazy danych używaj polecenia UPDATE w SQL.
- Zapytanie SQL UPDATE najczęściej zawiera klauzulę WHERE, która precyzuje, które rekordy (wiersze tabeli) mają być zmienione.
- Brak klauzuli WHERE w instrukcji UPDATE spowoduje aktualizację wszystkich rekordów. Należy zatem być ostrożnym i nie pomijać klauzuli WHERE, jeśli nie chcesz zmienić wszystkich wierszy tabeli.
Zachęcamy do przejrzenia naszego przewodnika po SQL w celu szybkiego przypomnienia składni.
newsblog.pl