Salt la conținutul principal
Modulul 9 · Lecția 3 din 435/57 în curs~10 min
Lecții din modul (3/4)

Schimbarea structurii: ALTER TABLE

Nevoile unei aplicații se modifică în timp, iar baza de date trebuie să țină pasul. ALTER TABLE este comanda (extrem de versatilă) dedicată modificării schemelor de tabel existente fără a fi nevoie să le abandoneze (riscând datele din interior).

Modificarea coloanelor (ADD / DROP / ALTER)

Adăugarea unei coloane necesită grijă. Dacă tabelul conține deja date, adăugarea unei coloane „NOT NULL” va genera o eroare în Postgres: ce ar trebui să insereze în rândurile vechi? Trebuie să asociați un 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;

Nu doar adăugarea sau eliminarea: adesea trebuie să reconfigurați tipul unei coloane sau una dintre constrângerile acesteia:

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;

Adăugarea de constrângeri în timpul execuției

La fel ca și în cazul CREATE TABLE, putem folosi ALTER TABLE pentru a atașa un CONSTRAINT la un tabel deja utilizat în aplicația de producție.

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;

Redenumire

Atât coloanele, cât și tabelele pot fi redenumite:

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

Încearcă

Exercițiu#sql.m9.l3.e1
Încercări: 0Se încarcă…

Tabelul „produse” are în prezent o coloană „nume”. Modificați tabelul prin redenumirea coloanei „nume” în „titlu”. Utilizați operațiunea RENUMIRE COLANE.

Se încarcă editorul...
Afișează indiciu

Sintaxă: ALTER TABLE ... RENAME COLUMN ... TO ...

Soluție disponibilă după 3 încercări

Adăugarea de constrângeri în post-producție

Exercițiu#sql.m9.l3.e2
Încercări: 0Se încarcă…

Modificați tabelul „produse” adăugând o constrângere CHECK (numită „verifica_prezzo”) care necesită ca prețul (coloana „preț”) să fie mai mare decât 0. Constrângerea trebuie adăugată fără a elimina coloana inițială.

Se încarcă editorul...
Afișează indiciu

Sintaxă: tabel ALTER TABLE ADD CONSTRAINT nume VERIFICARE (...)

Soluție disponibilă după 3 încercări