Celem tego zadania jest zapoznanie się z procesem instalacji lokalnego serwera deweloperskiego XAMPP oraz nawiązanie pierwszego połączenia z serwerem baz danych MariaDB (zamiennik MySQL) za pomocą wiersza poleceń.
Jesteś początkującym administratorem baz danych i Twoim pierwszym zadaniem jest przygotowanie środowiska pracy. Musisz zainstalować pakiet XAMPP, który dostarcza serwer WWW Apache, serwer baz danych MariaDB oraz interpreter PHP. Po pomyślnej instalacji musisz zweryfikować, czy usługi działają poprawnie. Następnie, korzystając z wiersza poleceń, zalogujesz się na konto administratora (root) serwera MariaDB. Jest to fundamentalny krok, który pozwoli Ci na dalsze zarządzanie bazami danych, tworzenie tabel i wykonywanie zapytań. Zrozumienie tego procesu jest kluczowe dla każdego, kto chce pracować z bazami danych w środowisku deweloperskim. Uruchomienie usług i zalogowanie się do konsoli SQL potwierdzi, że Twoje środowisko jest gotowe do dalszych, bardziej zaawansowanych zadań.
c:\xampp\mysql\bin.cd c:\xampp\mysql\bin
mysql -u root
W tym zadaniu nauczyłeś się, jak zainstalować i uruchomić lokalne środowisko serwerowe XAMPP. Dowiedziałeś się również, jak korzystać z wiersza poleceń, aby połączyć się z serwerem bazy danych MariaDB. To podstawowa umiejętność, która otwiera drogę do dalszej pracy z bazami danych.
Nauczenie się, jak tworzyć nową bazę danych oraz dedykowanego użytkownika z ograniczonymi uprawnieniami, co jest podstawową zasadą bezpieczeństwa.
Twoja firma planuje stworzyć nową aplikację do zarządzania biblioteką. Zostałeś poproszony o przygotowanie fundamentów pod ten system. Twoim zadaniem jest stworzenie nowej, pustej bazy danych o nazwie `biblioteka`. Praca na koncie `root` jest ryzykowna, dlatego musisz również utworzyć nowego użytkownika o nazwie `bibliotekarz`, który będzie miał pełne uprawnienia, ale tylko do bazy `biblioteka`. Ten użytkownik będzie wykorzystywany przez aplikację do łączenia się z bazą, co minimalizuje ryzyko uszkodzenia innych baz danych na serwerze w przypadku błędu lub ataku. Po utworzeniu użytkownika i nadaniu mu uprawnień, wylogujesz się z konta `root` i przetestujesz połączenie, logując się jako `bibliotekarz`, aby upewnić się, że wszystko działa zgodnie z oczekiwaniami.
CREATE DATABASE biblioteka CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_polish_ci';
CREATE USER 'bibliotekarz'@'localhost' IDENTIFIED BY 'TwojeSilneHaslo123!';
GRANT ALL PRIVILEGES ON biblioteka.* TO 'bibliotekarz'@'localhost';
FLUSH PRIVILEGES;
EXIT;
-- Logowanie jako nowy użytkownik
mysql -u bibliotekarz -p
W tym ćwiczeniu utworzyłeś swoją pierwszą bazę danych oraz dedykowanego użytkownika. Nauczyłeś się nadawać uprawnienia, co jest kluczowe dla bezpieczeństwa systemów bazodanowych. Oddzielenie ról administratora (root) od użytkowników aplikacji to fundamentalna, dobra praktyka.
Zdobycie praktycznej umiejętności tworzenia tabel w bazie danych za pomocą polecenia CREATE TABLE, definiowania kolumn, typów danych oraz klucza głównego.
Mając już bazę `biblioteka`, nadszedł czas, aby zdefiniować jej strukturę. Pierwszym elementem, który musisz stworzyć, jest tabela do przechowywania informacji o książkach. Musisz zaprojektować tabelę o nazwie `ksiazki`, która będzie zawierała kluczowe informacje: unikalny identyfikator (ID), tytuł, autora, rok wydania oraz numer ISBN. Każda kolumna musi mieć odpowiedni typ danych – na przykład ID powinno być automatycznie zwiększaną liczbą całkowitą, a tytuł i autor tekstem o zmiennej długości. Klucz główny na kolumnie ID zapewni unikalność każdego rekordu. Po napisaniu i wykonaniu zapytania SQL, sprawdzisz strukturę nowo utworzonej tabeli, aby upewnić się, że wszystkie kolumny i ich właściwości zostały zdefiniowane poprawnie. To zadanie nauczy Cię, jak przekładać koncepcyjny model danych na fizyczną strukturę w bazie.
CREATE TABLE, które stworzy tabelę `ksiazki`.id_ksiazki: typ `INT`, klucz główny (`PRIMARY KEY`), auto-inkrementacja (`AUTO_INCREMENT`).tytul: typ `VARCHAR(255)`, nie może być pusty (`NOT NULL`).autor: typ `VARCHAR(255)`, nie może być pusty (`NOT NULL`).rok_wydania: typ `INT`.isbn: typ `VARCHAR(13)`, unikalny (`UNIQUE`).DESCRIBE.USE biblioteka;
CREATE TABLE ksiazki (
id_ksiazki INT AUTO_INCREMENT PRIMARY KEY,
tytul VARCHAR(255) NOT NULL,
autor VARCHAR(255) NOT NULL,
rok_wydania INT,
isbn VARCHAR(13) UNIQUE
);
DESCRIBE ksiazki;
+-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | id_ksiazki | int(11) | NO | PRI | NULL | auto_increment | | tytul | varchar(255) | NO | | NULL | | | autor | varchar(255) | NO | | NULL | | | rok_wydania | int(11) | YES | | NULL | | | isbn | varchar(13) | YES | UNI | NULL | | +-------------+--------------+------+-----+---------+----------------+
Gratulacje! Właśnie stworzyłeś swoją pierwszą tabelę. Nauczyłeś się definiować kolumny, wybierać odpowiednie typy danych (INT, VARCHAR) oraz stosować ograniczenia (PRIMARY KEY, NOT NULL, UNIQUE). Zrozumienie tych koncepcji jest fundamentem projektowania każdej bazy danych.
Nauka modyfikacji struktury istniejącej tabeli poprzez dodanie nowej kolumny za pomocą polecenia ALTER TABLE.
Po wstępnym utworzeniu tabeli `ksiazki` okazało się, że brakuje w niej bardzo ważnej informacji – nazwy wydawnictwa. Twoim zadaniem jest rozszerzenie schematu tabeli bez utraty istniejących danych (chociaż na tym etapie tabela jest jeszcze pusta). Musisz dodać nową kolumnę o nazwie `wydawnictwo`, która będzie przechowywać tekst o maksymalnej długości 150 znaków. Ta operacja jest bardzo częsta w cyklu życia aplikacji, gdy pojawiają się nowe wymagania biznesowe. Po wykonaniu modyfikacji, ponownie sprawdzisz strukturę tabeli, aby potwierdzić, że nowa kolumna została pomyślnie dodana i jest gotowa na przyjmowanie danych.
ALTER TABLE, aby dodać kolumnę `wydawnictwo`.DESCRIBE, aby zobaczyć zmiany.ALTER TABLE ksiazki ADD COLUMN wydawnictwo VARCHAR(150);
DESCRIBE ksiazki;
+-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | id_ksiazki | int(11) | NO | PRI | NULL | auto_increment | | tytul | varchar(255) | NO | | NULL | | | autor | varchar(255) | NO | | NULL | | | rok_wydania | int(11) | YES | | NULL | | | isbn | varchar(13) | YES | UNI | NULL | | | wydawnictwo | varchar(150) | YES | | NULL | | +-------------+--------------+------+-----+---------+----------------+
W tym zadaniu nauczyłeś się, jak modyfikować istniejącą tabelę za pomocą ALTER TABLE. To potężne narzędzie pozwala na ewolucję schematu bazy danych wraz ze zmieniającymi się potrzebami aplikacji, bez konieczności usuwania i ponownego tworzenia tabel.
Nauczenie się dwóch popularnych metod importowania dużej ilości danych do tabeli: z pliku CSV oraz z pliku SQL.
Ręczne wstawianie każdej książki do bazy danych jest nieefektywne, zwłaszcza przy setkach lub tysiącach pozycji. Biblioteka otrzymała od dostawców dwa pliki z listą książek do dodania. Pierwszy plik to `ksiazki_import.csv`, a drugi to `ksiazki_import.sql`. Twoje zadanie jest podzielone na dwie części. Najpierw zaimportujesz dane z pliku CSV, używając polecenia `LOAD DATA INFILE`. Musisz zwrócić uwagę na poprawną ścieżkę do pliku oraz na strukturę samego pliku (separator pól, cudzysłowy). W drugiej części zadania zaimportujesz dane z pliku `.sql`, który zawiera gotowe polecenia `INSERT`. Zrobisz to za pomocą polecenia `SOURCE` bezpośrednio w konsoli MariaDB. Te dwie metody są niezbędne w pracy każdego administratora, który często musi migrować dane między systemami.
LOAD DATA INFILE 'C:/temp/ksiazki_import.csv'
INTO TABLE ksiazki
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(tytul, autor, rok_wydania, isbn, wydawnictwo);
Uwaga: W zależności od konfiguracji serwera MariaDB, może być konieczna zmiana ustawienia secure_file_priv lub umieszczenie pliku w specjalnym katalogu. W XAMPP często jest to C:/xampp/mysql/data/.
SOURCE C:/temp/ksiazki_import.sql;
SELECT COUNT(*) FROM ksiazki; -- Powinno zwrócić 50
Opanowałeś dwie kluczowe techniki importu danych. Polecenie LOAD DATA INFILE jest niezwykle wydajne przy dużych plikach tekstowych (CSV, TSV), podczas gdy SOURCE idealnie nadaje się do odtwarzania baz danych z kopii zapasowych lub wgrywania danych przygotowanych jako skrypty SQL.
Rozwinięcie umiejętności wyszukiwania danych o bardziej złożone warunki, użycie operatorów LIKE, AND, OR oraz sortowanie wyników.
Twoja baza książek jest już całkiem spora. Teraz musisz odpowiedzieć na bardziej szczegółowe pytania od użytkowników biblioteki. Pierwsze zapytanie dotyczy znalezienia wszystkich książek, których tytuł zaczyna się na literę "P". Drugie to prośba o listę wszystkich książek Andrzeja Sapkowskiego wydanych po 1995 roku. Trzecie zapytanie ma znaleźć wszystkie książki wydane przez "Greg" lub "superNOWA". Na koniec, masz przygotować listę wszystkich książek posortowaną od najnowszej do najstarszej. Te zadania wymagają użycia zaawansowanych operatorów w klauzuli `WHERE` oraz opanowania sortowania, co pozwoli Ci na tworzenie precyzyjnych i użytecznych raportów.
-- Wyszukiwanie po tytule
SELECT * FROM ksiazki WHERE tytul LIKE 'P%';
-- Łączenie warunków (AND)
SELECT * FROM ksiazki WHERE autor = 'Andrzej Sapkowski' AND rok_wydania > 1995;
-- Użycie operatora IN
SELECT * FROM ksiazki WHERE wydawnictwo IN ('Greg', 'superNOWA');
-- Sortowanie malejące
SELECT * FROM ksiazki ORDER BY rok_wydania DESC;
-- Wyszukiwanie książek z lat 90-tych (1990-1999)
SELECT tytul, autor, rok_wydania FROM ksiazki WHERE rok_wydania BETWEEN 1990 AND 1999;
-- Zliczanie książek danego autora
SELECT COUNT(*) AS liczba_ksiazek FROM ksiazki WHERE autor = 'Stanisław Lem';
-- Wyszukiwanie książek zawierających w tytule słowo 'Ogród'
SELECT * FROM ksiazki WHERE tytul LIKE '%Ogród%';
-- Wyświetlanie unikalnych autorów z bazy
SELECT DISTINCT autor FROM ksiazki ORDER BY autor;
-- Wyświetlanie 5 najstarszych książek w bazie
SELECT * FROM ksiazki ORDER BY rok_wydania ASC LIMIT 5;
W tym zadaniu poznałeś zaawansowane techniki filtrowania i sortowania danych. Operator LIKE pozwala na elastyczne wyszukiwanie wzorców tekstowych, AND i IN umożliwiają tworzenie złożonych warunków logicznych, a klauzula ORDER BY daje pełną kontrolę nad kolejnością prezentacji wyników.