ALTER i DROP: zmiana struktury
Dodawaj kolumny świadomie. Rozpoznaj, kiedy zmieniasz definicję tabeli, a kiedy bezpowrotnie usuwasz jej dane.
Część bazodanowa INF.03Struktura także się zmienia
Sklep zaczyna zbierać telefon kontaktowy. Nie trzeba tworzyć nowej bazy od początku: ALTER TABLE zmienia definicję istniejącej tabeli. Zmiana typu, usunięcie kolumny i dodanie ograniczenia wpływają również na dane oraz aplikacje korzystające z tabeli. Najpierw sprawdź zależności i przygotuj kopię możliwą do odtworzenia.
Dodaj kolumnę: ten sam cel, cztery dialekty
Telefon przechowujemy jako tekst. Przykłady poniżej dotyczą rzeczywistych silników, tabeli klienci bez istniejącej kolumny telefon. Wykonaj tylko wariant właściwy dla swojego środowiska.
-- MySQL / MariaDB
ALTER TABLE klienci ADD COLUMN telefon VARCHAR(25) NULL;
-- SQL Server
ALTER TABLE klienci ADD telefon NVARCHAR(25) NULL;
-- Oracle 19c
ALTER TABLE klienci ADD (telefon VARCHAR2(25 CHAR));
-- Access / ACE
ALTER TABLE klienci ADD COLUMN telefon TEXT(25);Dodanie opcjonalnej kolumny pozwala uzupełniać dane stopniowo. Gdy w tabeli są stare wiersze, nie dodawaj od razu obowiązkowej kolumny bez decyzji, skąd wziąć brakujące wartości. Typowy proces: dodaj kolumnę dopuszczającą NULL, uzupełnij ją, sprawdź kompletność, a dopiero wtedy wprowadź NOT NULL.
Zmień typ albo długość
-- MySQL / MariaDB: pełna definicja kolumny
ALTER TABLE klienci MODIFY COLUMN telefon VARCHAR(40) NULL;
-- SQL Server
ALTER TABLE klienci ALTER COLUMN telefon NVARCHAR(40) NULL;
-- Oracle 19c
ALTER TABLE klienci MODIFY (telefon VARCHAR2(40 CHAR));
-- Access / ACE
ALTER TABLE klienci ALTER COLUMN telefon TEXT(40);Poszerzenie pola tekstowego jest inną operacją niż skrócenie limitu do 5 znaków. Skrócenie może zakończyć się błędem lub utratą części danych zależnie od silnika, trybu i operacji. Zmiana tekstu na liczbę wymaga sprawdzenia wszystkich wartości. Nie zakładaj, że silnik poprawnie odgadnie znaczenie numeru telefonu.
W MySQL/MariaDB przy MODIFY podaj potrzebne atrybuty definicji, np. NOT NULL i DEFAULT — pominięte atrybuty mogą nie zostać zachowane. Nazwy ograniczeń zapisuj w projekcie: łatwiej świadomie zmienić ck_towary_cena niż wyszukiwać przypadkową nazwę wygenerowaną przez serwer.
Usunięcie kolumny i tabeli
-- Odpowiedni rzeczywisty silnik, wyłącznie dane ćwiczeniowe
ALTER TABLE klienci DROP COLUMN telefon;
-- Wspólny podstawowy zapis
DROP TABLE tabela_probna;DROP COLUMN usuwa kolumnę wraz z jej wartościami. DROP TABLE usuwa definicję tabeli i jej dane. To inna operacja niż DELETE, które usuwa wiersze, pozostawiając strukturę. DROP DATABASE usuwa całą bazę i nie jest potrzebne do tej lekcji. Nie używaj poleceń DROP do „naprawiania” nieznanego błędu.
Klucze obce, indeksy, widoki i kod aplikacji mogą zależeć od usuwanego obiektu. Odmowa usunięcia tabeli nadrzędnej jest informacją o zależności, nie powodem do bezrefleksyjnego wyłączania kontroli kluczy. Najpierw zdecyduj, co ma się stać z danymi powiązanymi.
Ćwiczenie zmiany schematu w przeglądarce
Edytor obsługuje tylko prosty wariant ALTER TABLE ADD z typem INTEGER/INT, TEXT albo REAL. Poniższy pakiet dodaje opcjonalny telefon do danych startowych. Odczyt pokaże pięć wierszy i NULL w nowej kolumnie. Powtórne dodanie tej samej kolumny ma zgłosić błąd; Reset bazy przywraca początek.
ALTER TABLE klienci ADD telefon TEXT;
SELECT id, imie, telefon FROM klienci ORDER BY id;Wypróbuj zapytanie
SQLite w przeglądarce — ograniczona emulacja składni MySQL / SQL Server. To nie są rzeczywiste serwery. Ścisłe typy, auto-ID i administrację ćwicz w prawdziwym SZBD.
Ćwiczenia i rozwiązania
- Dodaj do produktów kolumnę uwagi typu TEXT w edytorze. Wyświetl nazwy i uwagi.
- Przygotuj dla MySQL/MariaDB zmianę limitu uwag na VARCHAR(300), dopuszczający NULL. Wyjaśnij, dlaczego nie wykonasz jej w edytorze.
- Masz tabelę z 1000 wierszy i chcesz dodać wymagany numer klienta. Opisz kolejność bez zgadywania numerów.
Rozwiązania
-- W edytorze
ALTER TABLE produkty ADD uwagi TEXT;
SELECT nazwa, uwagi FROM produkty ORDER BY id;
-- Tylko właściwy serwer MySQL/MariaDB
ALTER TABLE produkty MODIFY COLUMN uwagi VARCHAR(300) NULL;1. Cztery produkty, uwagi NULL. 2. Edytor nie emuluje zmiany typu ani limitu VARCHAR. Najpierw trzeba sprawdzić długości istniejących treści. 3. Dodaj kolumnę opcjonalną, pozyskaj poprawne wartości z wiarygodnego źródła, sprawdź braki i duplikaty, dopiero potem dodaj NOT NULL/UNIQUE zgodnie z wymaganiami. Nie zastępuj wszystkich braków tym samym fikcyjnym numerem.
Dokumentacja: MySQL ALTER TABLE, SQL Server ALTER TABLE, Oracle ALTER TABLE, Access ALTER TABLE. INF.03.4: modyfikowanie struktury, zachowanie spójności. Dalej: INSERT.

