DDL (Data Definition Language) to podzbiór poleceń SQL, którymi definiujesz i zmieniasz strukturę bazy danych, a nie dane w niej zapisane. Mówiąc wprost: DDL tworzy szkielet — tabele, kolumny, indeksy, widoki, schematy — a nie wiersze. Jeśli kiedykolwiek pisałeś CREATE TABLE, ALTER TABLE czy DROP TABLE, to właśnie używałeś DDL, nawet jeśli nikt ci tego tak nie nazwał.
Do czego to służy
Każda baza relacyjna potrzebuje zdefiniowanej struktury, zanim cokolwiek do niej wrzucisz. DDL jest tym warstwą projektową: określasz, jakie tabele istnieją, jakie mają kolumny, jakich typów, jakie więzy integralności (PRIMARY KEY, FOREIGN KEY, NOT NULL) i jakie indeksy przyspieszą zapytania. To odróżnia DDL od DML (Data Manipulation Language: INSERT, UPDATE, DELETE), które operuje już na konkretnych danych w gotowych tabelach.
Najważniejsze polecenia DDL to CREATE (tworzy obiekt), ALTER (zmienia istniejący), DROP (usuwa go w całości), TRUNCATE (czyści zawartość tabeli) oraz RENAME. TRUNCATE bywa zaskoczeniem — choć czyści dane, klasyfikuje się jako DDL, bo działa na poziomie struktury, a nie wiersz po wierszu.
Przykład z praktyki
Załóżmy, że w PostgreSQL budujesz tabelę użytkowników, a potem dokładasz kolumnę:
CREATE TABLE users (id SERIAL PRIMARY KEY, email VARCHAR(255) NOT NULL);
ALTER TABLE users ADD COLUMN created_at TIMESTAMP DEFAULT now();
W migracjach (np. Flyway, Liquibase, Django migrations) to właśnie DDL jest sercem każdego pliku migracyjnego — wersjonujesz strukturę bazy tak samo jak kod.
Na co uważać
Największy mit: „DROP mogę cofnąć rollbackiem”. Zależy od silnika. PostgreSQL ma transakcyjne DDL — CREATE TABLE czy ALTER TABLE opakujesz w BEGIN ... ROLLBACK i wycofasz (z wyjątkami jak CREATE DATABASE). MySQL historycznie tak nie działa: InnoDB robi niejawny COMMIT przed i po każdym poleceniu DDL, więc rollbacku nie ma. Od MySQL 8.0.13 (2018) doszło atomic DDL, ale to nie to samo co pełne transakcje. Drugi mit: że TRUNCATE to szybsze DELETE — w MySQL TRUNCATE commituje natychmiast i nie cofniesz go, w PostgreSQL bywa transakcyjny. Zawsze rób backup przed DROP na produkcji. Naprawdę zawsze.
Pojęcia powiązane
DML (manipulacja danymi), DCL (GRANT, REVOKE — uprawnienia), TCL (COMMIT, ROLLBACK — transakcje), schema, migracje bazy danych, więzy integralności.