Część 13 · SQL: definicja danych (DDL) i struktura tabel — kurs PHP INF.03
Część 13 kursu PHP pod kątem INF.03: definicja danych (DDL), tworzenie tabel (CREATE TABLE), modyfikacja struktury (ALTER TABLE), dobór typów danych i ograniczenia NOT NULL.
- 45 min
- 16 slajdów
- Notatki nauczyciela: N
- Strona modułu: otwórz
Co dziś robimy
- 12 minTworzenie tabeli i typy kolumn Każda kolumna może mieć ograniczenia: NOT NULL wymaga wartości, a DEFAULT podaje wartość…
- 12 minKlucze i automatyczny numer UNIQUE pilnuje, żeby wartości się nie powtarzały, ale nie tworzy klucza głównego — dobry…
- 12 minZmiana i usuwanie struktury DROP TABLE usuwa całą tabelę razem z danymi, a DROP DATABASE całą bazę.
- 4 minĆwiczenia 16 zadań w module — wybierz 3–4 na lekcję
- 5 minPodsumowanie bilet wyjściowy i zadanie domowe
Tworzenie tabeli i typy kolumn
Tabelę tworzy polecenie CREATE TABLE . W nawiasie wymieniamy kolumny z typami: INT dla liczb całkowitych, VARCHAR(50) dla tekstu o ograniczonej długości, DATE dla daty.
- Każda kolumna może mieć ograniczenia: NOT NULL wymaga wartości, a DEFAULT podaje wartość domyślną.
- Dobrze dobrany typ oszczędza miejsce i chroni przed błędnymi danymi.
- Nazwy tabel i kolumn piszemy bez polskich znaków i spacji — najlepiej małymi literami z podkreśleniem.
- Dzięki temu zapytania działają tak samo na każdym serwerze.
Jak to wygląda w kodzie
CREATE TABLE uczniowie (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50) NOT NULL,
klasa VARCHAR(10) NOT NULL,
punkty INT NOT NULL DEFAULT 0,
data_dodania DATE
);
Uruchom i pokaż
CREATE TABLE uczniowie (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50) NOT NULL,
klasa VARCHAR(10) NOT NULL,
punkty INT NOT NULL DEFAULT 0,
data_dodania DATE
);
Pytanie do klasy
Który typ przechowuje tekst?
Poprawna: d) VARCHAR przechowuje napisy o ustalonej długości.
Klucze i automatyczny numer
PRIMARY KEY wskazuje kolumnę jednoznacznie identyfikującą wiersz. Zwykle jest to id z typem INT i cechą AUTO_INCREMENT , więc baza sama nada kolejny numer.
- UNIQUE pilnuje, żeby wartości się nie powtarzały, ale nie tworzy klucza głównego — dobry wybór dla adresu e-mail albo loginu.
- Klucz główny jest tylko jeden, unikalnych indeksów może być kilka.
- FOREIGN KEY łączy tabele i pilnuje spójności: nie da się dodać ucznia z klasą, której nie ma.
- W zadaniach egzaminacyjnych często wystarczy sam klucz główny i kolumna łącząca.
Jak to wygląda w kodzie
CREATE TABLE klasy (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(10) NOT NULL UNIQUE
);
CREATE TABLE uczniowie (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50) NOT NULL,
klasa_id INT UNSIGNED NOT NULL,
FOREIGN KEY (klasa_id) REFERENCES klasy(id)
);
Uruchom i pokaż
CREATE TABLE klasy (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(10) NOT NULL UNIQUE
);
CREATE TABLE uczniowie (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50) NOT NULL,
klasa_id INT UNSIGNED NOT NULL,
FOREIGN KEY (klasa_id) REFERENCES klasy(id)
);
Pytanie do klasy
Co robi AUTO_INCREMENT?
Poprawna: c) Baza sama zwiększa numer kolejnych wierszy.
Zmiana i usuwanie struktury
ALTER TABLE zmienia istniejącą tabelę: dodaje kolumnę, zmienia typ albo dopisuje indeks. To najbezpieczniejszy sposób poprawy struktury, bo nie kasuje danych.
- DROP TABLE usuwa całą tabelę razem z danymi, a DROP DATABASE całą bazę.
- Na egzaminie trzeba uważać, żeby nie pomylić DELETE (usuwa wiersze) z DROP (usuwa strukturę).
- Przed zmianą struktury warto zrobić kopię zapasową.
- W zadaniach szkolnych wystarczy świadomość, że operacje DDL są nieodwracalne.
Jak to wygląda w kodzie
ALTER TABLE uczniowie ADD email VARCHAR(80);
ALTER TABLE uczniowie MODIFY klasa VARCHAR(15) NOT NULL;
ALTER TABLE uczniowie ADD INDEX idx_klasa (klasa);
-- usuniecie niepotrzebnej kolumny
ALTER TABLE uczniowie DROP COLUMN email;
Uruchom i pokaż
ALTER TABLE uczniowie ADD email VARCHAR(80);
ALTER TABLE uczniowie MODIFY klasa VARCHAR(15) NOT NULL;
ALTER TABLE uczniowie ADD INDEX idx_klasa (klasa);
-- usuniecie niepotrzebnej kolumny
ALTER TABLE uczniowie DROP COLUMN email;
Pytanie do klasy
Co robi ALTER TABLE?
Poprawna: b) ALTER zmienia kolumny i indeksy istniejącej tabeli.
Ćwiczenia w module (16)
- 1Podstawowe CREATE TABLE
- 2Bezpieczne tworzenie z IF NOT EXISTS
- 3Klucz główny i AUTO_INCREMENT
- 4Dobór typu tekstowego: VARCHAR vs TEXT
- 5Liczby całkowite i ułamkowe: INT i DECIMAL
- 6Daty i czas: DATE i DATETIME
- 7Wartości logiczne i statusy: TINYINT(1)
- 8Ograniczenie NOT NULL
- 9Wartość początkowa DEFAULT
- 10Klucz obcy w schemacie tabeli
- 11Badanie struktury tabeli DESCRIBE
- 12Dodanie kolumny ALTER TABLE ADD
- 13Zmiana typu kolumny ALTER TABLE MODIFY
- 14Usunięcie kolumny ALTER TABLE DROP
- 15Bezpieczne usuwanie tabeli DROP TABLE
- 16Skrypt instalacyjny bazy danych w PHP
Co zabrać z lekcji
- Każda kolumna może mieć ograniczenia: NOT NULL wymaga wartości, a DEFAULT podaje wartość domyślną.
- UNIQUE pilnuje, żeby wartości się nie powtarzały, ale nie tworzy klucza głównego — dobry wybór dla adresu e-mail albo loginu.
- DROP TABLE usuwa całą tabelę razem z danymi, a DROP DATABASE całą bazę.
- Ćwiczenia
Odpowiedź: b) ALTER TABLE ADD