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.

dml.sqlsql
-- 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;
  1. INSERT wymieniaj kolumny jawnie. Liczba i kolejność wartości musi do nich pasować.
  2. UPDATE ... WHERE poprawia tylko wskazane rekordy. Bez WHERE zmieni wszystkie.
  3. DELETE ... WHERE usuwa tylko wskazane rekordy. Bez WHERE opróżni całą tabelę.
  4. 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.

Ta interakcja wymaga włączonego JavaScriptu.

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
Tak nie
UPDATE Klienci SET miasto = 'Sopot';

Wszyscy klienci naraz dostają miasto Sopot. Baza nie ostrzega: wykona polecenie bez pytania.

Tak
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
Tak nie
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.

Tak
INSERT INTO Klienci (imie, nazwisko, miasto)
VALUES ('Ewa', 'Zielinska', 'Olsztyn');

Każdej wymienionej kolumnie odpowiada dokładnie jedna wartość.

Tekst bez apostrofów
Tak nie
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.

Tak
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
Tak nie
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.

Tak
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ć

  1. Schemat pracy: sprawdź, zmień, sprawdź.
  2. UPDATE i DELETE bez WHERE obejmują całą tabelę.
  3. WHERE oparty na kluczu głównym wskazuje dokładnie jeden rekord, a imię lub nazwisko mogą się powtórzyć.
  4. Klucze obce chronią dane: nie dodasz zamówienia nieistniejącego klienta ani nie usuniesz produktu, który jest w zamówieniu.
  5. Teksty i daty piszesz w apostrofach, a liczba wartości w INSERT musi 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ę →
Źródła i dalsza nauka