Dotąd zapytania tylko czytały dane. Instrukcje INSERT, UPDATE i DELETE je zmieniają — a pomyłka (zwłaszcza brak WHERE) potrafi zniszczyć całą tabelę. Dlatego lekcja uczy prostego nawyku: przed zmianą sprawdź, które wiersze zostaną objęte, a po zmianie zweryfikuj wynik.
Scenariusz jest przeznaczony na 45 minut dla klasy znającej SELECT i WHERE — na przykład po lekcji o WHERE. Ćwiczenia wykonuj tylko na bazie ćwiczeniowej.
Przygotowanie stanowisk
Potrzebna jest baza MySQL 8 lub MariaDB (na przykład w XAMPP) i narzędzie do wykonywania zapytań, np. phpMyAdmin. Utwórz pustą bazę ćwiczeniową i zaimportuj raz plik baza.sql z pakietu. Plik nie usuwa tabel, więc ponowny import zgłosi błąd istniejącej tabeli. Zapytania zapisuj w start.sql; rozwiązania są w rozwiazania.sql. Ponieważ zadania zmieniają dane, przed drugim podejściem wyczyść bazę i zaimportuj baza.sql jeszcze raz (usuń tabelę poleceniem DROP TABLE uczestnicy;).
Cele i plan lekcji
Po zajęciach uczeń potrafi:
- dodać wiersz instrukcją
INSERT ... VALUESz jawną listą kolumn; - zmienić dane instrukcją
UPDATE ... SET ... WHERE; - usunąć wiersze instrukcją
DELETE ... WHERE; - sprawdzić zakres zmiany zapytaniem
SELECTz tym samym warunkiem przedUPDATEiDELETE.
| Czas | Praca na lekcji |
|---|---|
| 0–5 min | Problem: dane trzeba aktualizować |
| 5–15 min | INSERT i UPDATE |
| 15–22 min | DELETE i znaczenie WHERE |
| 22–37 min | Cztery zadania samodzielne |
| 37–42 min | Sprawdzenie stanu tabeli po każdym kroku |
| 42–45 min | Pytania kontrolne |
Tabela uczestnicy
Kolumny: id, imie, klasa, punkty. Na początku tabela ma cztery wiersze.
| id | imie | klasa | punkty |
|---|---|---|---|
| 1 | Anna | 2A | 15 |
| 2 | Bartek | 2B | 30 |
| 3 | Celina | 2A | 25 |
| 4 | Damian | 2B | 5 |
INSERT, UPDATE, DELETE
INSERT INTO tabela (kolumny) VALUES (wartości) dodaje wiersz; listę kolumn warto zawsze podawać, aby kolejność wartości nie zależała od budowy tabeli. UPDATE tabela SET kolumna = wartość WHERE warunek zmienia wybrane wiersze, a wyrażenie po prawej stronie może korzystać ze starej wartości (punkty = punkty + 10). DELETE FROM tabela WHERE warunek usuwa wiersze.
Brak WHERE w UPDATE lub DELETE obejmuje wszystkie wiersze tabeli. Dobry nawyk: najpierw zapisz SELECT * FROM uczestnicy WHERE ... z tym samym warunkiem, sprawdź, które wiersze zostaną zmienione, i dopiero potem zamień SELECT * na UPDATE lub DELETE. W systemach produkcyjnych dodatkowo stosuje się transakcje i kopie zapasowe; w ćwiczeniach wystarczy możliwość ponownego zaimportowania baza.sql.
Zadania
Zadanie 1. Dodaj uczestniczkę Ewa z klasy 2A, o id 5 i z 0 punktów. Sprawdź liczbę wierszy.
Zadanie 2. Zwiększ o 10 punktów wszystkich uczestników z klasy 2A. Najpierw wypisz wiersze, których dotyczy zmiana.
Zadanie 3. Usuń uczestników, którzy mają mniej niż 20 punktów. Najpierw sprawdź ich zapytaniem SELECT.
Zadanie 4. Wypisz wszystkich pozostałych uczestników według id.
Dla chętnych: opisz własnymi słowami, co stałoby się z tabelą po wykonaniu UPDATE uczestnicy SET punkty = 0; bez WHERE (nie wykonuj tego na tabeli, którą chcesz zachować).
Rozwiązanie i wyniki
-- Zadanie 1
INSERT INTO uczestnicy (id, imie, klasa, punkty)
VALUES (5, 'Ewa', '2A', 0);
-- Zadanie 2
UPDATE uczestnicy
SET punkty = punkty + 10
WHERE klasa = '2A';
-- Zadanie 3
DELETE FROM uczestnicy
WHERE punkty < 20;
-- Zadanie 4
SELECT id, imie, klasa, punkty
FROM uczestnicy
ORDER BY id;
Stan tabeli po kolejnych krokach (sprawdzony na SQLite z tą samą tabelą):
- po zadaniu 1: pięć wierszy (Ewa z 0 punktów);
- po zadaniu 2: Anna 25, Celina 35, Ewa 10, Bartek 30 i Damian 5 punktów;
- po zadaniu 3: usunięto dwa wiersze (Damian — 5 punktów i Ewa — 10 punktów).
Wynik zadania 4:
| id | imie | klasa | punkty |
|---|---|---|---|
| 1 | Anna | 2A | 25 |
| 2 | Bartek | 2B | 30 |
| 3 | Celina | 2A | 35 |
Zadanie 2 zmienia trzy wiersze (Anna, Celina i nowo dodana Ewa), więc Ewa po zmianie ma 10 punktów i trafia pod warunek z zadania 3. To dobry przykład na to, że kolejność instrukcji ma znaczenie.
Typowe błędy
| Objaw | Co sprawdzić |
|---|---|
| Zmieniły się wszystkie wiersze | W UPDATE lub DELETE brakuje WHERE. |
| Błąd: Duplicate entry for key PRIMARY | INSERT z id, które już istnieje. |
| Wartości trafiają do złych kolumn | Brak listy kolumn w INSERT albo inna kolejność wartości. |
| Tekst nie jest dodawany | Napis musi być w apostrofach: 'Ewa'. |
| Usunięto za mało wierszy | Warunek < 20 pominął wiersze z dokładnie 20 punktami. |
| Nie da się cofnąć zmiany | Bez transakcji zmiana jest trwała; zaimportuj bazę ponownie. |
Pytania kontrolne i punktacja
- Co zrobi
DELETE FROM uczestnicy;bezWHERE? - Jak zwiększyć punkty Anny o 5?
- Dlaczego warto wykonać
SELECTz tym samym warunkiem przedUPDATE?
Odpowiedzi: Usunie wszystkie wiersze tabeli (sama tabela zostanie). UPDATE uczestnicy SET punkty = punkty + 5 WHERE imie = 'Anna';. Aby zobaczyć, które wiersze zostaną zmienione, i uniknąć pomyłki.
Proponowana punktacja (razem 10 punktów): zadanie 1 — INSERT z listą kolumn 2 pkt; zadanie 2 — UPDATE z wyrażeniem 1 pkt, WHERE 1 pkt, wcześniejszy SELECT 1 pkt; zadanie 3 — DELETE z warunkiem 2 pkt; zadanie 4 — poprawny stan końcowy 2 pkt, wyjaśnienie wpływu kolejności 1 pkt. Zadanie dla chętnych nie jest wymagane do pełnej oceny.
Materiały do pobrania
Rozpakuj ZIP przed otwarciem plików. Materiały są dostępne bez logowania; publiczne rozwiązanie służy nauce i samodzielnemu sprawdzeniu, a nie poufnemu sprawdzianowi.
Co dalej?
Następne kroki to transakcje, klucze obce i projektowanie tabel. Ten materiał rozwija dział o modyfikowaniu danych w kursie SQL w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.
Źródła techniczne: INSERT w dokumentacji MySQL, UPDATE oraz DELETE. Zobacz też lekcję o WHERE.
Poprowadź kolejne lekcje SQL
Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.
Kup dostęp do kursu SQL →