Dataczwartek, 13 sierpnia 2026 Czas19:18:40
← Bazy danych i SQL

Lekcja 6. DML — modyfikowanie danych (INSERT, UPDATE, DELETE)

Podstawowy

Po co się tego uczymy?

Sama struktura tabel to za mało — baza danych ma sens dopiero wtedy, gdy można do niej wkładać, poprawiać i usuwać dane. Rejestracja nowego użytkownika, edycja profilu, usunięcie konta — to wszystko w tle wykonuje polecenia DML.

Teoria

W poprzedniej lekcji nauczyłeś się budować DDL-em "półki" — tabele. Teraz czas nauczyć się wkładać na nie, poprawiać i usuwać "książki" — czyli same dane. Do tego służy DML (ang. Data Manipulation Language).

INSERT — dodawanie nowych danych
Składnia:

INSERT INTO nazwa_tabeli (kolumna1, kolumna2, ...)
VALUES (wartosc1, wartosc2, ...);

Przykłady:

INSERT INTO Uczniowie (imie, nazwisko, id_klasy)
VALUES ('Jan', 'Kowalski', 1);

INSERT INTO Uczniowie (imie, nazwisko, id_klasy) VALUES
('Anna', 'Nowak', 2),
('Piotr', 'Zieliński', 1);

Drugi przykład pokazuje, że można wstawić kilka wierszy jednym poleceniem — wystarczy oddzielić je przecinkami.

UPDATE — zmiana istniejących danych
Składnia:

UPDATE nazwa_tabeli
SET kolumna1 = nowa_wartosc1, kolumna2 = nowa_wartosc2
WHERE warunek;

Przykłady:

UPDATE Uczniowie SET id_klasy = 2 WHERE id_ucznia = 1;

UPDATE Produkty SET cena = cena * 1.10 WHERE kategoria = 'Instrumenty';

Drugi przykład podnosi cenę o 10% wszystkim produktom z danej kategorii naraz.

DELETE — usuwanie danych
Składnia:

DELETE FROM nazwa_tabeli WHERE warunek;

Przykłady:

DELETE FROM Uczniowie WHERE id_ucznia = 5;

DELETE FROM Zamowienia WHERE data_zamowienia < '2020-01-01';

Bardzo ważna zasada bezpieczeństwa: UPDATE i DELETE BEZ klauzuli WHERE działają na WSZYSTKICH wierszach tabeli naraz. DELETE FROM Uczniowie; bez warunku usunie kompletnie wszystkich uczniów. Zawsze najpierw sprawdź warunek zwykłym SELECT, a dopiero potem zamień go na UPDATE/DELETE.

Przykład z życia

Za każdym razem, gdy klient w sklepie internetowym składa zamówienie, w tle wykonuje się INSERT. Gdy zmienia adres dostawy — UPDATE. Gdy anuluje zamówienie — DELETE (albo, w bardziej ostrożnych systemach, UPDATE ustawiający status na "anulowane", żeby nic nie znikało bezpowrotnie).

Kod (SQL)

CREATE TABLE Uczniowie (
    id_ucznia INT AUTO_INCREMENT PRIMARY KEY,
    imie VARCHAR(50) NOT NULL,
    nazwisko VARCHAR(50) NOT NULL,
    id_klasy INT NOT NULL
);

-- dodajemy trzech uczniów jednym poleceniem

INSERT INTO Uczniowie (imie, nazwisko, id_klasy) VALUES
('Jan', 'Kowalski', 1),
('Anna', 'Nowak', 2),
('Piotr', 'Zieliński', 1);

-- Jan zmienia klasę

UPDATE Uczniowie SET id_klasy = 2 WHERE imie = 'Jan' AND nazwisko = 'Kowalski';

-- usuwamy jednego konkretnego ucznia po jego unikalnym id

DELETE FROM Uczniowie WHERE id_ucznia = 3;

-- sprawdzamy, co zostało w tabeli

SELECT * FROM Uczniowie;

Komentarz i wyjaśnienie kodu

Zwróć uwagę na warunek w UPDATE — używamy dwóch kolumn naraz (imie AND nazwisko), żeby mieć pewność, że zmieniamy dane właściwej osoby, a nie kogoś o tym samym imieniu. W DELETE celowo użyliśmy id_ucznia, czyli klucza głównego — to najbezpieczniejszy sposób wskazania DOKŁADNIE jednego wiersza, bo klucz główny nigdy się nie powtarza.

Ćwiczenie samodzielne

Uruchom kod z lekcji, a potem samodzielnie dopisz polecenie, które zmieni nazwisko Anny Nowak na "Kowalska", i drugie, które usunie ucznia o najniższym id_ucznia.

Zadania do pracy własnej

  1. Zadanie 1. DML w sklepie muzycznym

    Uwaga przed importem: plik z bazą jest spakowany jako .gz. phpMyAdmin w XAMPP przyjmuje takie pliki bez rozpakowywania. Jeżeli po pobraniu nazwa wygląda np. sklep_muzyczny.sql_.gz i import nie przejdzie, zmień nazwę pliku na sklep_muzyczny.sql.gz, a potem wybierz go w zakładce Importuj.

    Baza do pracy: Sklep muzyczny (.sql.gz). Zaimportuj spakowany plik SQL w XAMPP/phpMyAdmin, a następnie wykonaj zapytania.

    1. Dodaj trzy nowe rekordy do tabeli Klienci.
    2. Dodaj dwa produkty do tabeli Produkty.
    3. Zmień miasto jednego klienta.
    4. Zwiększ ceny produktów z kategorii Akcesoria o 10%.
    5. Ustaw e-mail klientowi, który ma wartość NULL.
    6. Usuń zamówienie testowe o wskazanym id.
    7. Dodaj nowe zamówienie dla istniejącego klienta i produktu.
    8. Zmień stan magazynowy po sprzedaży produktu.
    9. Usuń produkty o stanie magazynowym równym 0.
    10. Sprawdź wynik zmian zapytaniem SELECT.
  2. Zadanie 2. DML w aptece

    Uwaga przed importem: plik z bazą jest spakowany jako .gz. phpMyAdmin w XAMPP przyjmuje takie pliki bez rozpakowywania. Jeżeli po pobraniu nazwa wygląda np. sklep_muzyczny.sql_.gz i import nie przejdzie, zmień nazwę pliku na sklep_muzyczny.sql.gz, a potem wybierz go w zakładce Importuj.

    Baza do pracy: Apteka Zdrowie (.sql.gz). Zaimportuj spakowany plik SQL w XAMPP/phpMyAdmin, a następnie wykonaj zapytania.

    1. Dodaj trzy nowe rekordy do tabeli Klienci.
    2. Dodaj dwa produkty do tabeli Produkty.
    3. Zmień miasto jednego klienta.
    4. Zwiększ ceny produktów z kategorii Akcesoria o 10%.
    5. Ustaw e-mail klientowi, który ma wartość NULL.
    6. Usuń zamówienie testowe o wskazanym id.
    7. Dodaj nowe zamówienie dla istniejącego klienta i produktu.
    8. Zmień stan magazynowy po sprzedaży produktu.
    9. Usuń produkty o stanie magazynowym równym 0.
    10. Sprawdź wynik zmian zapytaniem SELECT.
  3. Zadanie 3. DML w siłowni

    Uwaga przed importem: plik z bazą jest spakowany jako .gz. phpMyAdmin w XAMPP przyjmuje takie pliki bez rozpakowywania. Jeżeli po pobraniu nazwa wygląda np. sklep_muzyczny.sql_.gz i import nie przejdzie, zmień nazwę pliku na sklep_muzyczny.sql.gz, a potem wybierz go w zakładce Importuj.

    Baza do pracy: Siłownia FitZone (.sql.gz). Zaimportuj spakowany plik SQL w XAMPP/phpMyAdmin, a następnie wykonaj zapytania.

    1. Dodaj trzy nowe rekordy do tabeli Klienci.
    2. Dodaj dwa produkty do tabeli Produkty.
    3. Zmień miasto jednego klienta.
    4. Zwiększ ceny produktów z kategorii Akcesoria o 10%.
    5. Ustaw e-mail klientowi, który ma wartość NULL.
    6. Usuń zamówienie testowe o wskazanym id.
    7. Dodaj nowe zamówienie dla istniejącego klienta i produktu.
    8. Zmień stan magazynowy po sprzedaży produktu.
    9. Usuń produkty o stanie magazynowym równym 0.
    10. Sprawdź wynik zmian zapytaniem SELECT.

Typowe błędy

Najgroźniejszy błąd to zapomnienie klauzuli WHERE w UPDATE lub DELETE — wtedy operacja obejmuje WSZYSTKIE wiersze tabeli, co w prawdziwej bazie danych może oznaczać katastrofę. Drugi błąd to niedopasowana liczba kolumn i wartości w INSERT (np. 4 kolumny, ale 3 wartości) — SQL zgłosi błąd. Trzeci: zapominanie apostrofów wokół tekstu i dat w VALUES.

Nawiązanie do egzaminu zawodowego

DML to bezpośrednia realizacja efektu "stosuje polecenia języka SQL" i "zmienia/usuwa rekordy w bazie danych przy użyciu języka SQL" z INF.03.4 — w części praktycznej egzaminu regularnie trzeba zaimportować dane, a potem napisać zapytanie aktualizujące konkretne rekordy (np. podwyższenie ceny noclegu o 10%, tak jak w przykładowym zadaniu CKE).