Dana jest tabela pracownicy o polach id, nazwisko, imie, wynagrodzenie. Kolumnę wynagrodzenie można usunąć za pomocą instrukcji
A.
ALTER TABLE pracownicy DELETE COLUMN wynagrodzenie;
B.
ALTER TABLE pracownicy DROP COLUMN wynagrodzenie;
C.
DROP TABLE pracownicy DELETE COLUMN wynagrodzenie;
D.
ALTER TABLE pracownicy DELETE wynagrodzenie;
Pytanie z egzaminu CKE, czerwiec 2021 (arkusz E.14-SG-21.06).
Instrukcja ALTER TABLE pracownicy DROP COLUMN wynagrodzenie; jest poprawna, bo do zmiany struktury istniejącej tabeli w SQL używa się polecenia ALTER TABLE. Usunięcie kolumny to operacja na schemacie bazy danych, czyli na definicji tabeli, a nie na samych rekordach. Słowo DROP oznacza usunięcie obiektu lub elementu struktury, a COLUMN doprecyzowuje, że chodzi właśnie o kolumnę wynagrodzenie, nie o całą tabelę. W praktyce taka operacja bywa używana np. gdy firma przestaje przechowywać wynagrodzenie w tabeli pracownicy i przenosi je do osobnej, lepiej zabezpieczonej tabeli place. Moim zdaniem to dobry przykład na odróżnienie poleceń DDL od DML: ALTER TABLE i DROP COLUMN zmieniają strukturę, a SELECT, INSERT, UPDATE, DELETE pracują głównie na danych. W dobrych praktykach przed wykonaniem takiego polecenia robi się kopię zapasową, sprawdza zależności, widoki, procedury, raporty oraz ewentualne indeksy czy ograniczenia związane z tą kolumną. W wielu systemach, takich jak MySQL, PostgreSQL czy SQL Server, podobna składnia jest standardowo spotykana, choć szczegóły mogą się minimalnie różnić. W środowisku produkcyjnym lepiej wykonać to jako migrację bazy danych, przetestowaną wcześniej na kopii, bo po usunięciu kolumny tracisz też zapisane w niej wartości.
Niepoprawne warianty wynikają głównie z pomieszania dwóch różnych grup poleceń SQL: tych, które zmieniają strukturę bazy, oraz tych, które operują na danych. Gdy chcemy usunąć kolumnę, nie kasujemy rekordów, tylko modyfikujemy definicję tabeli. Dlatego potrzebne jest ALTER TABLE, a nie sama instrukcja związana z usuwaniem danych. Słowo DELETE w SQL służy do usuwania wierszy z tabeli, na przykład DELETE FROM pracownicy WHERE id = 5;. Nie usuwa ono kolumny i nie jest poprawnym elementem składni przy zmianie schematu tabeli. To dość typowa pułapka, bo po polsku delete i drop można przetłumaczyć jako usuń, ale w SQL mają inne znaczenie techniczne. Równie mylące jest użycie DROP TABLE, ponieważ DROP TABLE usuwa całą tabelę pracownicy razem z jej strukturą i danymi, a nie tylko pole wynagrodzenie. To byłaby bardzo poważna operacja, raczej katastrofa w normalnej bazie, jeśli celem jest tylko pozbycie się jednej kolumny. Poprawna logika jest taka: najpierw wskazujesz tabelę, której strukturę zmieniasz, czyli ALTER TABLE pracownicy, a potem podajesz działanie na kolumnie, czyli DROP COLUMN wynagrodzenie. Z mojego doświadczenia warto zapamiętać prostą zasadę: DELETE usuwa wiersze, DROP usuwa obiekty lub elementy struktury, ALTER zmienia istniejący obiekt. Przed taką zmianą trzeba też sprawdzić, czy kolumna nie jest używana w widokach, zapytaniach aplikacji, formularzach, raportach albo ograniczeniach, bo sama składnia to jedno, a bezpieczne utrzymanie bazy to drugie.