Wskaż polecenie SQL dodające pole miesiacSiewu do istniejącej tabeli rosliny
A.
UPDATE rosliny ADD miesiacSiewu int;
B.
ALTER TABLE rosliny ADD miesiacSiewu int;
C.
INSERT INTO rosliny VALUES (miesiacSiewu int);
D.
CREATE TABLE rosliny {miesiacSiewu int};
Pytanie z egzaminu CKE, czerwiec 2016 (arkusz E.14-X-16.05).
Polecenie ALTER TABLE rosliny ADD miesiacSiewu int; jest właściwe, bo służy do modyfikowania struktury już istniejącej tabeli. W SQL takie operacje zaliczamy do DDL, czyli Data Definition Language, bo zmieniamy definicję obiektu w bazie danych, a nie same dane w wierszach. ALTER TABLE wskazuje tabelę, którą chcemy zmienić, ADD oznacza dodanie nowej kolumny, miesiacSiewu to nazwa pola, a int określa typ danych przechowujący liczby całkowite, np. wartości od 1 do 12. W praktyce takie pole można wykorzystać do zapisywania miesiąca siewu roślin, żeby później filtrować rekordy, np. wyszukać rośliny wysiewane w marcu. Z mojego doświadczenia warto od razu pomyśleć też o ograniczeniach, np. CHECK miesiacSiewu BETWEEN 1 AND 12, jeśli dany system bazodanowy to obsługuje. W większych projektach dobrą praktyką jest wykonywanie takich zmian przez migracje bazy danych, a nie ręczne klikanie w panelu, bo wtedy łatwiej kontrolować historię zmian i wdrożenia na serwerze.
W tym pytaniu kluczowe jest rozróżnienie między zmianą struktury tabeli a operacjami na danych. Jeśli chcemy dodać nowe pole, czyli nową kolumnę do istniejącej tabeli, nie używamy poleceń przeznaczonych do edycji rekordów ani tworzenia nowych obiektów od zera. UPDATE służy do zmiany wartości w już istniejących wierszach, na przykład można nim ustawić miesiacSiewu = 3 dla konkretnych roślin, ale dopiero wtedy, gdy taka kolumna już istnieje. Samo UPDATE nie dodaje kolumny do schematu tabeli, więc mieszanie go z ADD jest typowym błędem wynikającym z kojarzenia słowa update z ogólną aktualizacją bazy. CREATE TABLE ma inne zadanie: tworzy nową tabelę. Gdy tabela rosliny już istnieje, ponowne użycie CREATE TABLE najczęściej spowoduje błąd, chyba że wcześniej tabela została usunięta albo użyto specjalnych konstrukcji typu IF NOT EXISTS. Dodatkowo w standardowym SQL definicje kolumn zapisuje się w nawiasach okrągłych, a nie w klamrach, więc składnia z { } też jest podejrzana. INSERT INTO VALUES służy do dodawania nowych rekordów, czyli wierszy z danymi, a nie do dodawania kolumn. To częste nieporozumienie: kolumna opisuje strukturę tabeli, a wiersz to konkretna porcja danych. Moim zdaniem najprostsza zasada do zapamiętania jest taka: CREATE tworzy obiekt, INSERT dodaje wiersze, UPDATE zmienia wartości w wierszach, a ALTER TABLE zmienia budowę tabeli.