DML (Data Manipulation Language) to podzbiór poleceń SQL, którymi operujesz na danych wewnątrz tabel, a nie na ich strukturze. Należą tu cztery podstawowe komendy: SELECT (odczyt), INSERT (dodawanie), UPDATE (modyfikacja) i DELETE (usuwanie wierszy). W skrócie: DML to wszystko, co robisz z zawartością bazy na co dzień, kiedy aplikacja czyta i zapisuje rekordy.
Warto rozróżnić DML od sąsiednich rodzin poleceń. DDL (Data Definition Language, np. CREATE, ALTER, DROP) zmienia strukturę — tabele, kolumny, indeksy. DCL (GRANT, REVOKE) zarządza uprawnieniami. DML siedzi pomiędzy nimi i dotyka samych danych. Kluczowa cecha praktyczna: polecenia DML działają w ramach transakcji, więc dopóki nie zrobisz COMMIT, zmiany możesz cofnąć przez ROLLBACK. To Twoja siatka bezpieczeństwa, gdy coś pójdzie nie tak.
Mała uwaga o SELECT: część podręczników i egzaminów (np. klasyfikacja Oracle) zalicza go do DML, inni traktują go jako osobną kategorię „zapytań”, bo niczego nie zmienia. Na potrzeby nauki przyjmij, że SELECT to DML służący do odczytu — i nie kruszcie o to kopii na rozmowie rekrutacyjnej.
Przykład z praktyki
Załóżmy, że w PostgreSQL prowadzisz tabelę users i chcesz przesunąć użytkownika do innego planu. Typowa sekwencja DML wygląda tak:
INSERT INTO users (email, plan) VALUES ('[email protected]', 'free');UPDATE users SET plan = 'pro' WHERE email = '[email protected]';DELETE FROM users WHERE plan = 'free' AND created_at < '2024-01-01';
W kliencie typu psql czy DBeaver możesz to wszystko opakować w BEGIN; ... COMMIT;, żeby albo wykonało się w całości, albo wcale.
Częste błędy i pułapki
Najboleśniejszy klasyk to UPDATE lub DELETE bez klauzuli WHERE. Pomijasz warunek i nagle aktualizujesz albo kasujesz całą tabelę. Dlatego na produkcji najpierw uruchom SELECT z tym samym WHERE, sprawdź, ile wierszy złapie, a dopiero potem podmień na UPDATE/DELETE. Druga pułapka: zapomniany COMMIT w trybie ręcznych transakcji — kolega widzi „brak zmian", bo wszystko wisi w Twojej nierozliczonej transakcji i blokuje wiersze.
Pamiętaj też, że DELETE to DML i da się go cofnąć w transakcji, ale TRUNCATE (czyszczenie całej tabeli) to już operacja bliższa DDL — szybsza, lecz zwykle nieodwracalna i nie uruchamia triggerów wierszowych.
Pojęcia powiązane: SQL, DDL, DCL, TCL (COMMIT, ROLLBACK), transakcje, klauzula WHERE, CRUD, indeksy.