Zadanie 2: Sklep komputerowy — wypełnianie bazy danymi (INSERT)
PodstawowyPo co się tego uczymy?
Pusta baza z Zadania 1 niewiele Ci powie — dopiero z danymi w środku będziesz mógł ćwiczyć prawdziwe zapytania w kolejnych zadaniach.
Treść zadania
Scenariusz: Masz gotową strukturę bazy sklep_komputerowy z Zadania 1, ale jest pusta jak nowa, nieużywana szafa. W prawdziwym sklepie internetowym baza danych nie jest tylko pustą strukturą — trzeba ją wypełnić produktami, klientami i kategoriami. W tym zadaniu nauczysz się dodawać dane w taki sposób, żeby baza zaczęła przypominać prawdziwy system.
Do wykonania:
1. Dodaj minimum 5 kategorii produktów.
2. Dodaj minimum 5 producentów.
3. Dodaj minimum 15 produktów, korzystając z różnych kategorii i producentów.
4. Dodaj minimum 8 klientów z unikalnymi adresami e-mail.
5. Sprawdź dane za pomocą zapytań SELECT z każdej tabeli.
Jak zabrać się do zadania
1. Upewnij się, że pracujesz w bazie sklep_komputerowy z Zadania 1 (USE sklep_komputerowy;).
2. Wypełniaj tabele w tej samej kolejności co przy tworzeniu: najpierw Kategorie i Producenci, potem Produkty (bo potrzebuje ich identyfikatorów), na końcu Klienci.
3. Po każdym INSERCIE zrób szybki SELECT * z danej tabeli, żeby upewnić się, że dane faktycznie się zapisały.
4. Jeśli INSERT do Produkty zwróci błąd o naruszeniu klucza obcego, sprawdź, czy podane id_kategorii i id_producenta rzeczywiście istnieją w odpowiednich tabelach.
Jak powinien wyglądać efekt
Po wykonaniu zadania SELECT * FROM Produkty; powinien pokazać coś w stylu:
+-------------+---------------------------+---------+---------------+ | id_produktu | nazwa | cena | id_kategorii | +-------------+---------------------------+---------+---------------+ | 1 | Procesor Core i5-14600K | 1499.00 | 1 | | 2 | Procesor Ryzen 7 7800X3D | 1899.00 | 1 | | 3 | Karta graficzna RTX 4070 | 3299.00 | 2 | ... +-------------+---------------------------+---------+---------------+ 15 rows in set (0.00 sec)
Liczba w ostatnim wierszu ("15 rows in set") to Twój sygnał, że dane faktycznie się zapisały — jeśli widzisz "0 rows" albo błąd, coś poszło nie tak przy INSERT.
Typowe problemy i jak sobie z nimi poradzić
Naruszenie klucza obcego przy dodawaniu produktu. Co się stało: INSERT INTO Produkty zgłasza błąd "Cannot add or update a child row: a foreign key constraint fails". Dlaczego: podałeś id_kategorii albo id_producenta, którego nie ma w odpowiedniej tabeli. Jak naprawić: sprawdź SELECT * FROM Kategorie;, jakie identyfikatory faktycznie istnieją, i użyj jednego z nich.
Brak cudzysłowów przy tekście. Co się stało: INSERT INTO Kategorie (nazwa) VALUES (Procesory); zgłasza błąd składni. Dlaczego: SQL traktuje tekst bez cudzysłowów jako nazwę kolumny albo stałą liczbową. Jak naprawić: zawsze otaczaj tekst pojedynczym cudzysłowem: 'Procesory'.
Przecinek zamiast kropki w cenie. Co się stało: VALUES (..., 1499,00, ...) zgłasza błąd albo zapisuje złą wartość. Dlaczego: SQL (i MySQL) używa kropki jako separatora dziesiętnego, nie przecinka. Jak naprawić: zawsze pisz ceny z kropką: 1499.00.
Duplikat e-maila klienta. Co się stało: drugi INSERT z tym samym adresem e-mail zgłasza błąd "Duplicate entry ... for key". Dlaczego: kolumna email ma więz UNIQUE z Zadania 1 — to działa poprawnie. Jak naprawić: użyj innego adresu e-mail dla każdego klienta.
Nawiązanie do egzaminu zawodowego
Realizuje efekt INF.03.4.5.3 ("wprowadza dane do bazy danych") — a solidny zestaw danych testowych jest niezbędny do sensownego ćwiczenia zapytań w kolejnych zadaniach.
Kryteria sukcesu — sprawdź, czy wykonałeś zadanie poprawnie
Po wykonaniu zadania sprawdź, czy:
1. SELECT * FROM Kategorie; zwraca co najmniej 5 wierszy,
2. SELECT * FROM Producenci; zwraca co najmniej 5 wierszy,
3. SELECT * FROM Produkty; zwraca co najmniej 15 wierszy,
4. SELECT * FROM Klienci; zwraca co najmniej 8 wierszy,
5. żadna kolumna id_kategorii ani id_producenta w tabeli Produkty nie jest pusta (NULL),
6. w danych nie ma przypadkowych duplikatów (np. dwóch identycznych klientów).
Rozwiązanie — zajrzyj tu dopiero na końcu
To jest rozwiązanie wzorcowe. Zajrzyj tu dopiero wtedy, gdy samodzielnie spróbujesz wykonać zadanie. Nie kopiuj kodu bezmyślnie — przepisanie go ręcznie pomaga zapamiętać składnię i kolejność działań. Kod jest celowo zablokowany do kopiowania.
INSERT INTO Kategorie (nazwa) VALUES
('Procesory'), ('Karty graficzne'), ('Pamięci RAM'), ('Dyski SSD'), ('Monitory');
INSERT INTO Producenci (nazwa, kraj_pochodzenia) VALUES
('Intel', 'USA'), ('AMD', 'USA'), ('Nvidia', 'USA'), ('Samsung', 'Korea Południowa'), ('LG', 'Korea Południowa');
INSERT INTO Produkty (nazwa, cena, ilosc_magazyn, id_kategorii, id_producenta) VALUES
('Procesor Core i5-14600K', 1499.00, 12, 1, 1),
('Procesor Ryzen 7 7800X3D', 1899.00, 8, 1, 2),
('Karta graficzna RTX 4070', 3299.00, 5, 2, 3),
('Karta graficzna RX 7700 XT', 2599.00, 6, 2, 2),
('Pamięć RAM 32GB DDR5', 549.00, 20, 3, 4),
('Pamięć RAM 16GB DDR5', 299.00, 30, 3, 4),
('Dysk SSD 1TB NVMe', 399.00, 25, 4, 4),
('Dysk SSD 2TB NVMe', 699.00, 15, 4, 4),
('Monitor 27" 144Hz', 1199.00, 10, 5, 5),
('Monitor 24" IPS', 649.00, 18, 5, 5),
('Procesor Core i9-14900K', 2399.00, 4, 1, 1),
('Karta graficzna RTX 4060', 1699.00, 9, 2, 3),
('Pamięć RAM 64GB DDR5', 999.00, 7, 3, 4),
('Dysk SSD 500GB SATA', 219.00, 40, 4, 4),
('Monitor 32" 4K', 1899.00, 3, 5, 5);
INSERT INTO Klienci (imie, nazwisko, email, telefon) VALUES
('Jan', 'Kowalski', 'jan.kowalski@gmail.com', '600100200'),
('Anna', 'Nowak', 'anna.nowak@wp.pl', '600200300'),
('Piotr', 'Wiśniewski', 'piotr.wisniewski@gmail.com', '600300400'),
('Zofia', 'Wójcik', 'zofia.wojcik@onet.pl', '600400500'),
('Marek', 'Kamiński', 'marek.kaminski@gmail.com', '600500600'),
('Ewa', 'Lewandowska', 'ewa.lewandowska@wp.pl', '600600700'),
('Tomasz', 'Zieliński', 'tomasz.zielinski@gmail.com', '600700800'),
('Katarzyna', 'Szymańska', 'katarzyna.szymanska@onet.pl', '600800900');