🎯 Cele lekcji

📐

1. Składnia CREATE TABLE

CREATE TABLE [IF NOT EXISTS] nazwa_tabeli (
    nazwa_kolumny1  TYP_DANYCH  [atrybuty],
    nazwa_kolumny2  TYP_DANYCH  [atrybuty],
    ...
    [ograniczenia_tabeli]
) [ENGINE=InnoDB] [DEFAULT CHARSET=utf8mb4];

Definiowanie PRIMARY KEY — trzy sposoby:

-- Sposób 1: inline (dla jednokolumnowego PK)
id INT AUTO_INCREMENT PRIMARY KEY

-- Sposób 2: na końcu tabeli (zalecany)
id INT AUTO_INCREMENT,
PRIMARY KEY (id)

-- Sposób 3: złożony PK (wiele kolumn)
id_zamowienia INT,
id_produktu   INT,
PRIMARY KEY (id_zamowienia, id_produktu)
🏷️

2. Atrybuty kolumn

AtrybutZnaczeniePrzykład
NOT NULLKolumna musi mieć wartość — brak NULLimie VARCHAR(50) NOT NULL
NULLKolumna może być pusta (domyślne)opis TEXT NULL
DEFAULT wartośćWartość domyślna gdy nie podanoaktywny BOOLEAN DEFAULT TRUE
UNIQUEWartości muszą być unikalne w całej tabeliemail VARCHAR(200) UNIQUE
AUTO_INCREMENTAutomatyczna numeracja (tylko INT, tylko PK)id INT AUTO_INCREMENT
UNSIGNEDTylko liczby nieujemne (zwiększa zakres)ilosc INT UNSIGNED
COMMENT 'opis'Komentarz dokumentujący kolumnęcena DECIMAL COMMENT 'w PLN'
DEFAULT CURRENT_TIMESTAMPBieżąca data/czas jako wartość domyślnadodano TIMESTAMP DEFAULT CURRENT_TIMESTAMP
🛒

3. Przykład kompletnej tabeli

CREATE TABLE produkty (
  id_produktu  INT            AUTO_INCREMENT PRIMARY KEY,
  kod_ean      CHAR(13)       UNIQUE,
  nazwa        VARCHAR(200)   NOT NULL,
  opis         TEXT,
  cena         DECIMAL(10,2)  NOT NULL DEFAULT 0.00,
  ilosc_mag    INT UNSIGNED   NOT NULL DEFAULT 0,
  id_kategorii INT,
  aktywny      BOOLEAN        DEFAULT TRUE,
  dodano       TIMESTAMP      DEFAULT CURRENT_TIMESTAMP,
  zmieniono    TIMESTAMP      DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Tabela produktów sklepu';
DECIMAL(10,2) — łącznie 10 cyfr, w tym 2 po przecinku. Maksimum: 99999999.99. Zawsze używaj DECIMAL (nie FLOAT) dla wartości finansowych — unika błędów zaokrągleń.

Inspekcja struktury tabel:

-- Wyświetl strukturę tabeli
DESCRIBE produkty;          -- lub DESC produkty;
SHOW COLUMNS FROM produkty;

-- Wyświetl pełne polecenie CREATE TABLE (jak zostało stworzone)
SHOW CREATE TABLE produkty;

-- Wyświetl wszystkie tabele w bieżącej bazie
SHOW TABLES;
SHOW TABLES LIKE 'pro%';
✏️

Zadania interaktywne

Zadanie 1Uzupełnij brakujące definicje kolumn

Uzupełnij brakujące fragmenty polecenia CREATE TABLE:

CREATE TABLE klienci (
  id_klienta   ,
  imie         VARCHAR(50) ,
  email        VARCHAR(200) NOT NULL ,
  miasto       VARCHAR(100) ,
  zarejestrowany TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Zadanie 2Quiz: co robi AUTO_INCREMENT?
  • Automatycznie aktualizuje datę modyfikacji rekordu
  • Automatycznie generuje kolejną unikalną wartość całkowitą (1, 2, 3...) przy każdym INSERT
  • Automatycznie oblicza sumę wartości w kolumnie
  • Automatycznie indeksuje tabelę po każdej zmianie
Zadanie 3Napisz CREATE TABLE dla encji Pracownik

Napisz kompletne polecenie CREATE TABLE pracownicy z kolumnami: id_pracownika (INT, PK, auto), imie (VARCHAR 50, NOT NULL), nazwisko (VARCHAR 100, NOT NULL), email (VARCHAR 200, UNIQUE), pensja (DECIMAL 10,2, domyślnie 0), data_zatrudnienia (DATE):

📌 Zapamiętaj