Polecenie w języku SQL ALTER TABLE USA RENAME COLUMN stolica TO miasto; ma za zadanie
A. skopiowanie kolumny stolica do nowej kolumny miasto.
B. zmianę nazwy kolumny stolica na miasto w tabeli USA.
C. zastąpienie wartości stolica wartością miasto we wszystkich rekordach tabeli USA.
D. zmianę nazwy tabeli USA na miasto.
Instrukcja ALTER TABLE USA RENAME COLUMN stolica TO miasto; służy do zmiany struktury tabeli, czyli schematu bazy danych. ALTER TABLE oznacza, że modyfikujemy definicję istniejącej tabeli USA, a fragment RENAME COLUMN stolica TO miasto wskazuje konkretnie, że kolumna o nazwie stolica ma dostać nową nazwę: miasto. Dane zapisane w tej kolumnie nie są przez to kasowane ani kopiowane, tylko pozostają w tej samej kolumnie, pod inną nazwą. W praktyce używa się tego np. wtedy, gdy nazwa kolumny była źle dobrana, niezgodna z konwencją projektu albo przestała pasować do znaczenia danych. Moim zdaniem to jedna z tych operacji SQL, przy których trzeba uważać, bo po zmianie nazwy kolumny trzeba też poprawić zapytania SELECT, INSERT, UPDATE, widoki, procedury i kod aplikacji korzystający ze starej nazwy. Dobra praktyka branżowa jest taka, żeby takie zmiany wykonywać przez migracje bazy danych i wcześniej sprawdzić zależności, szczególnie w środowisku produkcyjnym.
To polecenie nie zmienia nazwy całej tabeli, bo w składni SQL po ALTER TABLE podaje się nazwę tabeli, która ma zostać zmodyfikowana. W tym przypadku USA jest obiektem, na którym wykonujemy zmianę, a nie nazwą przeznaczoną do zastąpienia. Gdyby chodziło o zmianę nazwy tabeli, w wielu systemach używa się osobnej składni, na przykład ALTER TABLE USA RENAME TO miasto; albo polecenia RENAME TABLE, zależnie od konkretnego silnika bazy danych. Łatwo się tu pomylić, bo słowo RENAME kojarzy się ogólnie ze zmianą nazwy, ale trzeba patrzeć na pełną frazę: RENAME COLUMN oznacza zmianę nazwy kolumny.
Nie jest to też kopiowanie danych z jednej kolumny do drugiej. SQL do kopiowania wartości zwykle wymagałby utworzenia nowej kolumny, np. przez ALTER TABLE ... ADD COLUMN, a potem użycia UPDATE z przypisaniem wartości. Sama zmiana nazwy kolumny nie tworzy drugiego pola i nie powiela rekordów. Tak samo polecenie nie zastępuje tekstu stolica tekstem miasto we wszystkich wierszach tabeli. Do modyfikacji wartości w rekordach służy UPDATE, np. UPDATE USA SET jakas_kolumna = 'miasto' WHERE jakas_kolumna = 'stolica';. Tutaj stolica i miasto są nazwami elementów schematu, a nie wartościami przechowywanymi w komórkach tabeli. Z mojego doświadczenia najczęstszy błąd polega właśnie na mieszaniu dwóch poziomów: struktury tabeli, czyli kolumn i ich nazw, z danymi zapisanymi w rekordach. ALTER TABLE pracuje głównie na strukturze, natomiast UPDATE pracuje na danych.
Nie jest to też kopiowanie danych z jednej kolumny do drugiej. SQL do kopiowania wartości zwykle wymagałby utworzenia nowej kolumny, np. przez ALTER TABLE ... ADD COLUMN, a potem użycia UPDATE z przypisaniem wartości. Sama zmiana nazwy kolumny nie tworzy drugiego pola i nie powiela rekordów. Tak samo polecenie nie zastępuje tekstu stolica tekstem miasto we wszystkich wierszach tabeli. Do modyfikacji wartości w rekordach służy UPDATE, np. UPDATE USA SET jakas_kolumna = 'miasto' WHERE jakas_kolumna = 'stolica';. Tutaj stolica i miasto są nazwami elementów schematu, a nie wartościami przechowywanymi w komórkach tabeli. Z mojego doświadczenia najczęstszy błąd polega właśnie na mieszaniu dwóch poziomów: struktury tabeli, czyli kolumn i ich nazw, z danymi zapisanymi w rekordach. ALTER TABLE pracuje głównie na strukturze, natomiast UPDATE pracuje na danych.