W jaki sposób wykonanie podanej kwerendy SQL wpłynie na tabelę pracownicy?
ALTER TABLE pracownicy MODIFY plec char(9);
A. Doda kolumnę plec ze znakowym typem danych o stałej długości 9.
B. Doda kolumnę plec ze znakowym typem danych o zmiennej długości 9.
C. Zmieni typ danych kolumny plec na znakowy o zmiennej długości 9.
D. Zmieni typ danych kolumny plec na znakowy o stałej długości 9.
Ta kwerenda wykonuje zmianę definicji istniejącej tabeli pracownicy. Polecenie ALTER TABLE należy do grupy DDL, czyli Data Definition Language, i służy do modyfikowania struktury obiektów bazy danych. Fragment MODIFY plec char(9) oznacza, że istniejąca już kolumna plec zostanie zmieniona tak, aby miała typ CHAR o długości 9 znaków. CHAR jest typem znakowym o stałej długości, więc baza rezerwuje miejsce na dokładnie 9 znaków, a krótsze wartości mogą być dopełniane spacjami. To różni się od VARCHAR, gdzie długość jest zmienna. W praktyce taką zmianę robi się np. podczas poprawiania źle zaprojektowanej kolumny albo dostosowania jej do nowego formatu danych. Moim zdaniem przy danych typu płeć lepszym projektem często byłby krótszy kod, np. CHAR(1), albo słownik wartości, ale sama składnia z pytania faktycznie zmienia typ kolumny. Dobra praktyka: przed ALTER TABLE warto zrobić kopię zapasową i sprawdzić istniejące dane, bo w niektórych systemach DBMS zmiana typu może się nie udać, jeśli dane nie pasują do nowej definicji.
W tej kwerendzie łatwo pomylić dwie różne operacje wykonywane na strukturze tabeli: dodawanie kolumny i modyfikowanie kolumny. Słowo MODIFY nie tworzy nowego pola w tabeli, tylko zmienia definicję pola, które już istnieje. Gdyby celem było dodanie kolumny plec, w zapytaniu pojawiłoby się raczej ADD, na przykład ALTER TABLE pracownicy ADD plec CHAR(9);. Dlatego interpretowanie tej instrukcji jako dodania nowej kolumny wynika zwykle z ogólnego skojarzenia ALTER TABLE ze zmianami w tabeli, ale trzeba patrzeć na dokładną klauzulę po nazwie tabeli. Ważna jest też różnica między CHAR i VARCHAR. Typ CHAR(9) oznacza dane znakowe o stałej długości 9 znaków, a nie zmiennej. Jeśli wpiszesz krótszą wartość, system bazy danych może ją wewnętrznie dopełnić spacjami, zależnie od silnika i ustawień. Typ o zmiennej długości zapisałoby się jako VARCHAR(9), ewentualnie VARCHAR2 w niektórych bazach, na przykład w Oracle. Z mojego doświadczenia takie pomyłki biorą się z tego, że oba typy przechowują tekst, ale w projektowaniu bazy mają inne zastosowanie. CHAR sprawdza się przy danych zawsze tej samej długości, np. kod kraju albo stały identyfikator, natomiast VARCHAR jest rozsądniejszy przy napisach różnej długości, takich jak nazwisko czy adres e-mail. Tutaj zapytanie nie mówi nic o dodawaniu pola ani o zmiennej długości, tylko o zmianie typu istniejącej kolumny plec na CHAR(9).