SQL: modyfikacja i projekt
🎯 Po co Ci to?
Wyszukiwanie (12.4) tylko czyta bazę. Ale baza żyje: klienci przybywają, dane się zmieniają, książki znikają z katalogu. Modyfikowanie danych to władza — i odpowiedzialność, bo jedno nieostrożne polecenie kasuje miliony rekordów bez pytania. Poznasz komendy zmieniające bazę (INSERT/UPDATE/DELETE) oraz — co ważniejsze — mechanizmy, którymi baza broni się przed wprowadzeniem w stan sprzeczny: integralność danych. To ta obietnica, której arkusz nigdy nie da: „nie pozwolę zapisać czegoś, co przeczy regułom". Zrozumienie jej to zrozumienie, czemu bazom powierza się pieniądze i dane medyczne, a arkuszom — nie.
✅ Czego się nauczysz
Po tej jednostce potrafisz:
- modyfikować dane: INSERT (dodaj), UPDATE (zmień), DELETE (usuń) z warunkami;
- wyjaśnić integralność danych: klucza (unikatowość), referencyjną (odnośniki prowadzą do realnych rekordów), dziedziny (typy i zakresy);
- opisać, jak baza chroni spójność, i docenić grozę operacji bez WHERE.
🔁 Przypomnij sobie
Z 12.4: WHERE wybiera rekordy; z 12.2: klucze główne i obce, integralność referencyjna; z 12.1: sprzeczności, których chcemy uniknąć.
📘 Wyjaśnienie
Trzy komendy modyfikacji. Dodawanie, zmiana, usuwanie — każda z warunkiem WHERE (poza INSERT):
INSERT INTO klienci (nazwisko, telefon)
VALUES ('Wiśniewski', '700-800-900'); -- dodaj nowy rekord
UPDATE klienci
SET telefon = '700-800-901'
WHERE id = 5; -- zmień telefon klienta nr 5
DELETE FROM wypozyczenia
WHERE data < '2020-01-01'; -- usuń stare wypożyczenia
Groza brakującego WHERE. Patrz uważnie: UPDATE klienci SET telefon = '700-800-901' bez WHERE zmieni telefon wszystkich klientów na jeden numer. DELETE FROM wypozyczenia bez WHERE skasuje całą tabelę. Baza wykona to posłusznie i natychmiast — to jest ta groza władzy: WHERE jest jedyną barierą między „zmień jeden rekord" a „zniszcz wszystko". Zawodowa zasada, spisana krwią niejednej firmy: przed UPDATE/DELETE napisz najpierw SELECT z tym samym WHERE i sprawdź, ILE rekordów dotknie — dopiero potem zamień SELECT na UPDATE/DELETE. To odpowiednik „najpierw kartka, potem komputer" z całej tej książki, w najwyższej stawce.
Integralność — baza broni się przed sprzecznością. Tu leży prawdziwa przewaga bazy nad arkuszem. Baza egzekwuje reguły, których złamać się nie da:
- Integralność klucza: dwa rekordy nie mogą mieć tego samego klucza głównego (baza odmówi wstawienia duplikatu
id) — tożsamość jest gwarantowana. - Integralność referencyjna (12.2): klucz obcy musi wskazywać na istniejący rekord. Nie wstawisz wypożyczenia z
klient_id = 99, jeśli klienta 99 nie ma; nie usuniesz klienta, który ma wypożyczenia (albo baza skaskaduje usunięcie — wg ustalonej reguły). Nie ma „wypożyczeń widm". - Integralność dziedziny: pole ma typ i zakres (data musi być datą, wiek nieujemny, telefon w formacie) — baza odrzuci „xyz" w polu liczbowym.
Te reguły definiuje się przy projektowaniu tabel (typy pól, klucze, więzy), a baza pilnuje ich przy każdej operacji, automatycznie, dla wszystkich użytkowników naraz. To jakościowa różnica: arkusz pozwoli wpisać cokolwiek gdziekolwiek; baza mówi „nie" wszystkiemu, co łamie reguły. Dlatego bankowi możesz zaufać, że nie zaksięguje przelewu na nieistniejące konto — integralność referencyjna tego pilnuje.
💭 Pomyśl: Bank próbuje wykonać przelew: odjąć 1000 zł z konta A i dodać do konta B. Po odjęciu z A, przed dodaniem do B — pada zasilanie. Co się stało z pieniędzmi i jak baza temu zapobiega?
Sprawdź odpowiedź
Bez ochrony: 1000 zł wyparowało (zniknęło z A, nie doszło do B) — katastrofa. Baza zapobiega temu transakcją: grupuje obie operacje w jedną niepodzielną całość, która albo wykona się w pełni, albo wcale — nigdy w połowie. Po awarii baza „cofa" niedokończoną transakcję, przywracając stan sprzed. To pojęcie (atomowość transakcji — „wszystko albo nic") jest fundamentem systemów finansowych i medycznych; arkusz nie ma niczego podobnego. Integralność to nie tylko reguły na pojedynczych rekordach — to gwarancja, że wielokrokowe operacje nie zostawią bazy w stanie sprzecznym. Właśnie dlatego pieniądze trzyma się w bazach, nie w arkuszach.
⚠️ Uwaga, pułapka
DELETE FROM tabela; bez WHERE oraz UPDATE tabela SET pole = X; bez WHERE to najniebezpieczniejsze polecenia w SQL — kasują/zmieniają wszystko, natychmiast, często bez „czy na pewno". Wiele realnych awarii (utrata danych klientów, zerwanie serwisów) to dokładnie brakujący WHERE wykonany na produkcyjnej bazie przez zmęczonego człowieka. Obrona: testowa kopia bazy do prób, SELECT przed każdą modyfikacją, uprawnienia (nie każdy może DELETE), kopie zapasowe (dział 16). Władza nad danymi wymaga dyscypliny proporcjonalnej do jej zasięgu.
🛠️ Teraz Ty
Na papierze (albo w bazie testowej — ostrożnie!) napisz dla bazy z 12.2: (a) INSERT nowej książki; (b) UPDATE zmieniający telefon konkretnego klienta (z WHERE po id!); (c) DELETE jednego wypożyczenia. Dla każdego UPDATE/DELETE najpierw napisz odpowiadający SELECT sprawdzający, ile rekordów dotknie. Zastanów się: co powinno się stać przy próbie usunięcia klienta, który ma aktywne wypożyczenia?
📐 Definicje tej lekcji
- INSERT / UPDATE / DELETE — dodaj / zmień / usuń rekordy; UPDATE i DELETE z warunkiem WHERE.
- Integralność danych — klucza (unikatowość PK), referencyjna (FK → istniejący rekord), dziedziny (typy/zakresy); egzekwowana przez bazę automatycznie.
- Transakcja — grupa operacji „wszystko albo nic"; chroni przed stanem sprzecznym przy awarii.
📌 Najważniejsze w pigułce
- WHERE to jedyna bariera przed „zmień/skasuj wszystko" — przed UPDATE/DELETE zawsze SELECT z tym samym warunkiem.
- Baza egzekwuje integralność (klucz, referencje, dziedzina) automatycznie — nie da się wprowadzić w stan sprzeczny.
- Transakcje („wszystko albo nic") czynią bazę godną zaufania dla pieniędzy i danych krytycznych.
🎒 Zadania
- Co robi
UPDATE ksiazki SET autor = 'Bolesław Prus' WHERE autor = 'Prus';i czemu jest to lepszy sposób poprawienia danych niż ręczna edycja każdego rekordu?
Wskazówka i odpowiedź
Zmienia autora na „Bolesław Prus" we wszystkich rekordach, gdzie było „Prus" — jedną komendą, spójnie, bez pominięcia żadnego. Ręczna edycja groziłaby przeoczeniem (i wróciłaby sprzeczność z 12.1!). To siła deklaratywności: opisujesz warunek („wszędzie, gdzie Prus"), baza dopilnowuje kompletu. Uwaga: gdyby w bazie był inny „Prus" (np. Maria Prus), ten UPDATE zmieniłby i jego — dlatego warunek trzeba dobrać precyzyjnie (lepiej po id, jeśli chodzi o konkretną osobę). Władza wymaga precyzji.
- Baza nie pozwala usunąć klienta, który ma wypożyczenia (zwraca błąd integralności referencyjnej). Wymień trzy sensowne strategie obsługi tej sytuacji i po jednej wadzie każdej.
Wskazówka i odpowiedź
(1) Zablokuj usunięcie, dopóki są wypożyczenia (wada: nie usuniesz klienta, który oddał, ale rekordy historyczne zostały). (2) Kaskada: usuń klienta i jego wypożyczenia razem (wada: tracisz historię — a bywa potrzebna prawnie/statystycznie). (3) Anonimizacja: zostaw wypożyczenia, ale odepnij dane osobowe (wada: więcej pracy, klient „widmo"). Wybór zależy od wymagań (RODO często każe (3) — dane osobowe usuń, statystyki zostaw; rozpoznajesz mechanizm z opisu tego systemu? usuwanie/anonimizacja konta!). Integralność referencyjna zmusza do świadomej decyzji zamiast cichej utraty spójności — i to jest jej zaleta.
- Sklep internetowy w jednej transakcji: (a) zmniejsza stan magazynowy o kupioną sztukę, (b) tworzy zamówienie, (c) obciąża kartę. Czemu te trzy operacje muszą być jedną transakcją, i co grozi bez tego?
Wskazówka i odpowiedź
Bez transakcji awaria między krokami daje sprzeczności: obciążono kartę, ale nie ma zamówienia (klient zapłacił za nic); zmniejszono magazyn, ale nie utworzono zamówienia (towar „zniknął"); zamówienie jest, ale karta nieobciążona (sklep stratny). Transakcja „wszystko albo nic" gwarantuje, że albo cały zakup się dokona spójnie, albo nic — po awarii baza cofa niedokończone. To dokładnie mechanizm z 💭 o przelewie, w handlu. Każdy realny system z pieniędzmi i zapasami stoi na transakcjach — bez nich pierwszy zanik prądu w trakcie zakupu robiłby chaos.
🔍 Sprawdź, czy umiesz
- Napisać INSERT/UPDATE/DELETE z poprawnym WHERE i uzasadnić SELECT-przed-modyfikacją.
- Wymienić trzy rodzaje integralności i podać przykład ochrony każdego.
- Wyjaśnić transakcję i czemu czyni bazę godną zaufania dla danych krytycznych.