Polecenie języka SQL w postaci
ALTER TABLE `miasta` ADD `kod` text;
A. w tabeli miasta zamienia nazwę kolumny kod na nazwę text
B. dodaje do tabeli kolumnę o nazwie kod typu text
C. zamienia nazwę tabeli miasta na nazwę kod
D. dodaje do tabeli dwie kolumny o nazwach: kod i text
Opracowane na podstawie zadania CKE, październik 2016 (arkusz E.14-X-16.08): W arkuszu nazwy tabeli i kolumny ujęto w apostrofy. W MySQL identyfikatory ujmuje się w znaki ` - apostrofy oznaczają tekst i polecenie byłoby błędne.
Polecenie ALTER TABLE służy do zmiany struktury istniejącej tabeli w bazie danych. W tym przypadku instrukcja ALTER TABLE `miasta` ADD `kod` text; oznacza: zmodyfikuj tabelę miasta i dodaj do niej nową kolumnę o nazwie kod, której typ danych to text. Słowo ADD jest tu kluczowe, bo mówi serwerowi SQL, że ma dopisać nowy element definicji tabeli, a nie zmieniać nazwę ani usuwać dane. Z kolei text to typ kolumny, czyli informacja, jaki rodzaj wartości będzie można w niej przechowywać. W MySQL typ TEXT nadaje się do dłuższych ciągów znaków, choć dla kodów pocztowych często praktyczniej dać VARCHAR, np. VARCHAR(6), bo kod ma zwykle ustaloną długość i nie wykonujemy na nim obliczeń. Moim zdaniem to ważna drobnostka: kod pocztowy nie powinien być typem liczbowym, bo może zaczynać się od zera, a wtedy liczba zgubiłaby ten początkowy znak. W praktyce przed ALTER TABLE dobrze zrobić kopię zapasową albo wykonać zmianę przez migrację, szczególnie na produkcyjnej bazie. W większych projektach dopisuje się też ograniczenia, np. NOT NULL, DEFAULT albo indeks, jeśli kolumna będzie często używana w wyszukiwaniu.
W tej instrukcji łatwo pomylić nazwę kolumny z typem danych, bo oba elementy stoją obok siebie. Jednak SQL ma dość konkretną składnię: po ADD podaje się nazwę nowej kolumny, a potem jej typ. Dlatego kod jest identyfikatorem kolumny, a text określa sposób przechowywania danych tekstowych. Nie są to dwie osobne kolumny. Gdyby rzeczywiście trzeba było dodać dwie kolumny, zapis wyglądałby inaczej, np. z kilkoma definicjami kolumn oddzielonymi przecinkami, zależnie od dialektu SQL. Częsty błąd myślowy polega na czytaniu instrukcji SQL jak zwykłego zdania, bez rozpoznawania słów kluczowych i ról poszczególnych fragmentów składni.
Ta komenda nie zmienia też nazwy tabeli. Do zmiany nazwy tabeli używa się innych konstrukcji, na przykład RENAME TABLE miasta TO kod albo ALTER TABLE miasta RENAME TO kod, zależnie od systemu bazy danych. Podobnie zmiana nazwy kolumny wymaga składni w rodzaju RENAME COLUMN albo CHANGE w MySQL. Samo ADD nigdy nie oznacza zamiany nazwy, tylko dodanie nowego elementu do definicji tabeli. Warto też zauważyć, że znaki `...` w MySQL oznaczają identyfikatory, czyli nazwy tabel i kolumn. One nie robią z kod i miasta wartości tekstowych, tylko pozwalają bezpiecznie wskazać obiekty bazy danych, nawet gdy nazwa koliduje ze słowem zastrzeżonym. Z mojego doświadczenia, takie szczegóły składni potem bardzo pomagają przy pracy w phpMyAdminie, migracjach i debugowaniu zapytań.
Ta komenda nie zmienia też nazwy tabeli. Do zmiany nazwy tabeli używa się innych konstrukcji, na przykład RENAME TABLE miasta TO kod albo ALTER TABLE miasta RENAME TO kod, zależnie od systemu bazy danych. Podobnie zmiana nazwy kolumny wymaga składni w rodzaju RENAME COLUMN albo CHANGE w MySQL. Samo ADD nigdy nie oznacza zamiany nazwy, tylko dodanie nowego elementu do definicji tabeli. Warto też zauważyć, że znaki `...` w MySQL oznaczają identyfikatory, czyli nazwy tabel i kolumn. One nie robią z kod i miasta wartości tekstowych, tylko pozwalają bezpiecznie wskazać obiekty bazy danych, nawet gdy nazwa koliduje ze słowem zastrzeżonym. Z mojego doświadczenia, takie szczegóły składni potem bardzo pomagają przy pracy w phpMyAdminie, migracjach i debugowaniu zapytań.