Polecenie ALTER TABLE artykuly ALTER cena SET DEFAULT 0; wprowadza w tabeli artykuly zmianę polegającą na
A. dodaniu kolumny cena z wartością 0 we wszystkich rekordach
B. zmianie typu kolumny cena na liczbowy
C. ustawieniu wartości domyślnej 0 dla kolumny cena
D. usunięciu kolumny cena
Polecenie ALTER TABLE artykuly ALTER cena SET DEFAULT 0 zmienia definicję kolumny cena w tabeli artykuly w taki sposób, że od tej chwili jej wartością domyślną będzie 0. Czyli jeżeli podczas dodawania nowego rekordu w instrukcji INSERT nie podasz wartości dla kolumny cena, system bazy danych sam wstawi tam 0. To jest typowa operacja DDL, czyli dotycząca struktury tabeli, a nie bezpośredniej edycji danych w istniejących rekordach. Ważne: to polecenie zwykle nie ustawia z automatu ceny 0 we wszystkich już zapisanych artykułach. Do tego służyłoby UPDATE artykuly SET cena = 0, ewentualnie z warunkiem WHERE. W praktyce DEFAULT przydaje się np. przy polach licznikowych, statusach, cenach początkowych, flagach aktywności albo datach utworzenia. Z mojego doświadczenia warto jednak uważać z domyślną ceną 0, bo biznesowo może oznaczać produkt darmowy, a czasem lepszy jest NULL lub dodatkowa walidacja. Dobra praktyka to sprawdzić zgodność typu danych kolumny z wartością domyślną oraz opisać taką zmianę w migracji bazy danych.
W tym poleceniu kluczowe jest rozróżnienie między zmianą definicji kolumny a operacją wykonywaną na danych. ALTER TABLE oznacza modyfikację struktury tabeli, ale dalsza część instrukcji mówi dokładniej, co ma się stać. Fragment ALTER cena SET DEFAULT 0 nie usuwa kolumny cena, bo do usuwania kolumn stosuje się składnię w stylu DROP COLUMN cena. Gdyby taka instrukcja została wykonana, kolumna zniknęłaby ze schematu tabeli razem z zapisanymi w niej wartościami, a tutaj nic takiego nie wynika z polecenia. Nie jest to też zmiana typu danych kolumny na liczbowy. Typ kolumny zmienia się inną konstrukcją, zależną od systemu bazodanowego, na przykład ALTER COLUMN cena TYPE numeric w PostgreSQL albo MODIFY cena DECIMAL(...) w MySQL. Samo wpisanie wartości 0 jako DEFAULT nie zamienia typu kolumny, tylko ustawia domyślną wartość, która musi być zgodna z aktualnym typem. Częsty błąd polega też na myleniu DEFAULT z aktualizacją rekordów. DEFAULT działa głównie przy przyszłych operacjach INSERT, kiedy użytkownik nie poda wartości dla danej kolumny. Nie dodaje też nowej kolumny, bo do tego służy ADD COLUMN. Moim zdaniem najprościej zapamiętać: DEFAULT ustawia zachowanie kolumny na przyszłość, UPDATE zmienia istniejące dane, ADD COLUMN dodaje kolumnę, a DROP COLUMN ją usuwa.