INF.03 · Bazy danych i SQL
DML: jak zmieniać dane i niczego nie zepsuć
Aplikacja sklepu dodaje zamówienie, poprawia adres klienta i anuluje błędną pozycję. Za każdym razem pod spodem działa jedno polecenie: INSERT, UPDATE albo DELETE. Pomyłka w jednym słowie, na przykład brak WHERE, może zmienić całą tabelę. Dlatego uczysz się nie tylko poleceń, ale też nawyku: sprawdź, zmień, sprawdź.
- około 35 minut
- INSERT · UPDATE · DELETE
- bazy: sklep_muzyczny, apteka, FitZone
Po tej lekcji: dodasz, poprawisz i usuniesz dokładnie te rekordy, które chcesz, a każdą zmianę udowodnisz zapytaniem kontrolnym.
1 · Schemat pracy
Sprawdź, zmień, sprawdź
DML zmienia rekordy, a nie strukturę tabeli. Przy każdej zmianie pracuj według tego samego schematu: najpierw SELECT, który pokazuje, co obejmie warunek, potem właściwe polecenie, a na końcu drugi SELECT, który dowodzi wyniku.
-- dodanie rekordu
INSERT INTO Uczniowie (imie, nazwisko, klasa)
VALUES ('Anna', 'Nowak', '3TP');
-- poprawka: sprawdź, zmień, sprawdź
SELECT * FROM Uczniowie WHERE id_ucznia = 2;
UPDATE Uczniowie SET klasa = '4TP' WHERE id_ucznia = 2;
SELECT * FROM Uczniowie WHERE id_ucznia = 2;
-- usunięcie: też z kontrolą
SELECT * FROM Uczniowie WHERE id_ucznia = 3;
DELETE FROM Uczniowie WHERE id_ucznia = 3;
INSERTwymieniaj kolumny jawnie. Liczba i kolejność wartości musi do nich pasować.UPDATE ... WHEREpoprawia tylko wskazane rekordy. BezWHEREzmieni wszystkie.DELETE ... WHEREusuwa tylko wskazane rekordy. BezWHEREopróżni całą tabelę.- Klucz główny w
WHERE. Warunek oparty na kluczu głównym wskazuje dokładnie jeden rekord. Imię i nazwisko mogą się powtarzać, więc nie są bezpiecznym identyfikatorem.
Laboratorium · ćwiczenie w przeglądarce, do którego odsyłają rozgrzewki na końcu lekcji
2 · Sprawdź na bezpiecznych danych
Uruchamiaj polecenia i czytaj odpowiedź bazy
To mała baza sklepu, na której nic nie możesz zepsuć na stałe. Wybieraj polecenia i patrz na komunikat bazy oraz na tabele. Zielone wiersze to te, które właśnie się zmieniły. Zwróć uwagę na dwie Anny, na polecenia bez WHERE i na ochronę kluczy obcych.
Komunikat „N rows affected” to Twój pierwszy punkt kontrolny. Jeśli spodziewałeś się jednego rekordu, a baza mówi o dwóch albo trzech, nie idź dalej.
3 · Zanim się pomylisz
Cztery pomyłki w DML
Rozwiń każdą z nich. Komunikaty pochodzą z prawdziwej bazy.
UPDATE bez WHERE
UPDATE Klienci SET miasto = 'Sopot';Wszyscy klienci naraz dostają miasto Sopot. Baza nie ostrzega: wykona polecenie bez pytania.
SELECT * FROM Klienci WHERE id_klienta = 2;
UPDATE Klienci SET miasto = 'Sopot'
WHERE id_klienta = 2;Najpierw sprawdź zakres tym samym WHERE, potem zmieniaj.
Zła liczba wartości w INSERT
INSERT INTO Klienci (imie, nazwisko, miasto)
VALUES ('Ewa', 'Zielinska');Błąd: Column count doesn't match value count at row 1. Trzy kolumny, dwie wartości.
INSERT INTO Klienci (imie, nazwisko, miasto)
VALUES ('Ewa', 'Zielinska', 'Olsztyn');Każdej wymienionej kolumnie odpowiada dokładnie jedna wartość.
Tekst bez apostrofów
INSERT INTO Klienci (imie, nazwisko, miasto)
VALUES (Ewa, 'Zielinska', 'Olsztyn');Błąd: Unknown column 'Ewa' in 'field list'. Bez apostrofów baza szuka kolumny o takiej nazwie.
INSERT INTO Klienci (imie, nazwisko, miasto)
VALUES ('Ewa', 'Zielinska', 'Olsztyn');Tekst i daty piszesz w apostrofach, na przykład '2026-03-10'.
Usuwanie rekordu, który jest w użyciu
DELETE FROM Produkty
WHERE id_produktu = 1;Błąd: Cannot delete or update a parent row: a foreign key constraint fails. Produkt występuje w zamówieniu.
DELETE FROM Zamowienia WHERE id_zamowienia = 1;
DELETE FROM Produkty WHERE id_produktu = 1;To ochrona danych, a nie awaria. Najpierw usuń rekordy zależne albo zmień status zamiast usuwać. Nie wyłączaj kontroli kluczy obcych.
4 · Sprawdź sam siebie
Przed oddaniem zadania z modyfikacją danych
W zadaniu z INF.03 polecenie musi zmienić dokładnie wskazane rekordy. Przed wykonaniem pokaż SELECT kontrolny, użyj poprawnego klucza i po operacji udowodnij wynik kolejnym SELECT.
Podsumowanie
Co warto zapamiętać
- Schemat pracy: sprawdź, zmień, sprawdź.
UPDATEiDELETEbezWHEREobejmują całą tabelę.WHEREoparty na kluczu głównym wskazuje dokładnie jeden rekord, a imię lub nazwisko mogą się powtórzyć.- Klucze obce chronią dane: nie dodasz zamówienia nieistniejącego klienta ani nie usuniesz produktu, który jest w zamówieniu.
- Teksty i daty piszesz w apostrofach, a liczba wartości w
INSERTmusi zgadzać się z liczbą kolumn.
Dalej na swoim koncie
Rozgrzewki, quiz i zadania są w biurku ucznia.
Teoria jest otwarta dla wszystkich. Żeby rozwiązywać zadania, zapisywać szkice i widzieć swój postęp, zaloguj się.
Zaloguj się →