ALTER TABLE artykuly MODIFY cena float; Kwerenda ma za zadanie w tabeli artykuly
ALTER TABLE artykuly MODIFY cena float;Kwerenda ma za zadanie w tabeli artykuly
A. zmienić typ na float dla kolumny cena.
B. zmienić nazwę kolumny z cena na float.
C. dodać kolumnę cena o typie float, jeśli nie istnieje.
D. usunąć kolumnę cena typu float.
Pytanie z egzaminu CKE, czerwiec 2021 (arkusz EE.09-SG-21.06).
Instrukcja ALTER TABLE artykuly MODIFY cena float; oznacza modyfikację definicji istniejącej kolumny cena w tabeli artykuly. W składni MySQL/MariaDB słowo MODIFY służy właśnie do zmiany typu danych kolumny albo innych jej cech, np. NOT NULL, DEFAULT czy długości typu. Tutaj zmieniany jest typ kolumny cena na float, czyli liczbowy typ zmiennoprzecinkowy. W praktyce taka operacja może być potrzebna, gdy wcześniej cena była zapisana np. jako int, varchar albo decimal o niepasującym formacie i chcemy przechowywać wartości z częścią ułamkową. Trzeba jednak pamiętać, że float jest typem przybliżonym, więc do cen w prawdziwych systemach sprzedażowych częściej stosuje się decimal, np. decimal(10,2), bo daje dokładniejsze wyniki przy obliczeniach finansowych. Moim zdaniem to ważny szczegół, bo sama składnia jest prosta, ale dobór typu danych już wymaga myślenia projektowego. Dobrą praktyką jest też wykonanie kopii zapasowej przed ALTER TABLE, szczególnie na produkcyjnej bazie, bo zmiana struktury tabeli może wpłynąć na dane, indeksy i działanie aplikacji.
W tej kwerendzie łatwo pomylić kilka podobnych operacji SQL, bo wszystkie dotyczą struktury tabeli, ale robią zupełnie inne rzeczy. Polecenie ALTER TABLE oznacza, że zmieniamy definicję tabeli, natomiast konkretne działanie określa słowo znajdujące się dalej. Gdyby celem było usunięcie kolumny cena, należałoby użyć składni z DROP COLUMN, na przykład ALTER TABLE artykuly DROP COLUMN cena;. Samo MODIFY nie kasuje kolumny, tylko zmienia jej definicję, więc dane mogą zostać przekształcone do nowego typu, o ile baza jest w stanie to zrobić. Dodawanie kolumny też wygląda inaczej: używa się ADD albo ADD COLUMN, np. ALTER TABLE artykuly ADD cena float;. W wielu systemach SQL warunek jeśli nie istnieje zależy od wersji i konkretnego silnika bazy, więc nie można go sobie dopowiedzieć na podstawie samego MODIFY. Zmiana nazwy kolumny również nie jest tym samym co modyfikacja typu. W MySQL do zmiany nazwy można użyć RENAME COLUMN albo CHANGE, zależnie od wersji i potrzeb. Typowy błąd myślowy polega na traktowaniu wyrazu float jak nowej nazwy kolumny, a tutaj float jest typem danych. Kolumna nadal nazywa się cena, tylko baza ma ją od tej pory interpretować jako wartość zmiennoprzecinkową. Z mojego doświadczenia warto czytać takie zapytania od lewej do prawej: jaka tabela, jaka operacja, jaka kolumna i jaki nowy typ lub atrybut. To bardzo pomaga nie mieszać poleceń DDL.