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.
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.
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
);
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
);
Który typ przechowuje tekst?
Poprawna: d) VARCHAR przechowuje napisy o ustalonej długości.
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.
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)
);
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)
);
Co robi AUTO_INCREMENT?
Poprawna: c) Baza sama zwiększa numer kolejnych wierszy.
ALTER TABLE zmienia istniejącą tabelę: dodaje kolumnę, zmienia typ albo dopisuje indeks. To najbezpieczniejszy sposób poprawy struktury, bo nie kasuje danych.
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;
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;
Co robi ALTER TABLE?
Poprawna: b) ALTER zmienia kolumny i indeksy istniejącej tabeli.