Przejdź do głównej treści
eLearner.app
Moduł 9 · Lekcja 3 z 435/57 w kursie~10 min
Lekcje modułu (3/4)

Modyfikowanie struktury: ALTER TABLE

Potrzeby aplikacji zmieniają się z biegiem czasu, a baza danych musi za nimi nadążać. ALTER TABLE to (niezwykle wszechstronne) polecenie przeznaczone do modyfikowania istniejących schematów tabel bez konieczności ich usuwania (ryzykując znajdujące się w nich dane).

Modyfikowanie kolumn (ADD / DROP / ALTER)

Dodanie kolumny wymaga ostrożności. Jeśli tabela zawiera już dane, dodanie kolumny „NOT NULL” spowoduje błąd w Postgresie: co powinna wstawić w starych wierszach? Musisz powiązać DEFAULT.

SQL
-- Aggiungiamo una colonna
ALTER TABLE users ADD COLUMN age INTEGER; -- Ok, sarà NULL ovunque

-- Aggiungiamo NOT NULL, quindi diamogli un deafult
ALTER TABLE users ADD COLUMN active BOOLEAN NOT NULL DEFAULT true;

-- Cancellare una colonna (ATTENZIONE! i dati andranno persi)
ALTER TABLE users DROP COLUMN age;

Nie tylko dodawanie lub usuwanie: często trzeba ponownie skonfigurować typ kolumny lub jedno z jej ograniczeń:

SQL
-- Cambia il tipo di dato (postgreSQL farà un 'cast' dei dati esistenti se possibile)
ALTER TABLE users ALTER COLUMN username TYPE VARCHAR(100);

-- Aggiunge il vincolo NOT NULL
ALTER TABLE users ALTER COLUMN username SET NOT NULL;

-- Rimuove il vincolo NOT NULL (ritorna ad accettare null)
ALTER TABLE users ALTER COLUMN username DROP NOT NULL;

Dodawanie ograniczeń w czasie wykonywania

Podobnie jak w przypadku CREATE TABLE, możemy użyć ALTER TABLE, aby dołączyć CONSTRAINT do tabeli już używanej w aplikacji produkcyjnej.

SQL
-- Aggiungi un nuovo Foreign Key
ALTER TABLE orders
  ADD CONSTRAINT fk_order_status FOREIGN KEY (status_id) REFERENCES statuses(id);

-- Aggiungi un CHECK
ALTER TABLE products
  ADD CONSTRAINT price_positive CHECK (price > 0);

-- E per distruggerli?
ALTER TABLE products DROP CONSTRAINT price_positive;

Zmiana nazwy

Można zmieniać nazwy kolumn i tabel:

SQL
ALTER TABLE users RENAME TO auth_users;
ALTER TABLE auth_users RENAME COLUMN username TO login_name;

Spróbuj

Ćwiczenie#sql.m9.l3.e1
Próby: 0Ładowanie...

Tabela „produkty” zawiera obecnie kolumnę „nazwa”. Zmodyfikuj tabelę, zmieniając nazwę kolumny „nazwa” na „tytuł”. Użyj operacji ZMIEŃ NAZWĘ KOLUMNY.

Ładowanie edytora...
Pokaż wskazówkę

Składnia: ALTER TABLE ... ZMIEŃ NAZWĘ KOLUMNY ... TO ...

Rozwiązanie dostępne po 3 próbach

Dodawanie ograniczeń w postprodukcji

Ćwiczenie#sql.m9.l3.e2
Próby: 0Ładowanie...

Zmodyfikuj tabelę „produkty”, dodając ograniczenie CHECK (o nazwie „verifica_prezzo”), które wymaga, aby cena (kolumna „cena”) była większa niż 0. Ograniczenie należy dodać bez usuwania oryginalnej kolumny.

Ładowanie edytora...
Pokaż wskazówkę

Składnia: ALTER TABLE tabela ADD CONSTRAINT nazwa CHECK (...)

Rozwiązanie dostępne po 3 próbach