CodeGym /Corsi /SQL SELF /Aggiunta e rimozione di colonne in una tabella

Aggiunta e rimozione di colonne in una tabella

SQL SELF
Livello 18 , Lezione 0
Disponibile

Aggiunta e rimozione di colonne in una tabella

Immagina di progettare un database per un'università. All'inizio la tabella degli studenti ha solo due campi: ID e nome. Tutto semplice, gli studenti iniziano a usare il sistema. Ma dopo un mese arrivano i professori e ti dicono: "Ma si può aggiungere anche l'età?", e poco dopo: "Serve anche l'email". E poi ancora: "Dai, togliamo finalmente il campo middle_name, tanto nessuno lo compila!". Ecco, qui ti serviranno le skill con ALTER TABLE per aggiungere e togliere colonne.

Sintassi per aggiungere colonne

Quindi, per aggiungere una nuova colonna a una tabella PostgreSQL già esistente, si usa il comando ALTER TABLE. Ecco la sintassi:

ALTER TABLE table_name
ADD COLUMN column_name data_type [constraints];
  • table_name — il nome della tabella dove vuoi aggiungere la nuova colonna.
  • column_name — il nome della colonna che vuoi aggiungere.
  • data_type — il tipo di dato, tipo VARCHAR, INTEGER o DATE.
  • constraints (parametro opzionale) — i vincoli che vuoi mettere su questa colonna, tipo NOT NULL, DEFAULT ecc.

Esempio: aggiungiamo una nuova colonna

Supponiamo di avere la tabella students, creata in precedenza:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

All'improvviso arriva la richiesta di aggiungere la colonna age per salvare l'età degli studenti. Ecco come si fa:

ALTER TABLE students
ADD COLUMN age INTEGER;

Ora la struttura della tabella students sarà così:

id name age
1 Eva NULL
2 Alex NULL

Se aggiungi nuovi record senza specificare l'età, PostgreSQL metterà automaticamente NULL, visto che non abbiamo messo nessun vincolo tipo NOT NULL o valori di default (DEFAULT).

Sintassi per rimuovere colonne

Per togliere una colonna da una tabella si usa sempre il comando ALTER TABLE. Ecco la sintassi:

ALTER TABLE table_name
DROP COLUMN column_name [RESTRICT | CASCADE];
  • table_name — il nome della tabella da cui vuoi togliere la colonna.
  • column_name — il nome della colonna che vuoi eliminare.
  • RESTRICT — blocca la rimozione se ci sono riferimenti (default).
  • CASCADE — elimina la colonna e tutte le dipendenze collegate.

Del discorso sulle eliminazioni a cascata ti parlo meglio al prossimo livello :P

Esempio: togliamo una colonna inutile

Torniamo alla tabella students. Abbiamo deciso che il campo age non serve più. Lo togliamo così:

ALTER TABLE students
DROP COLUMN age;

Ora la struttura della tabella si semplifica di nuovo:

id name
1 Eva
2 Alex

Esempi utili

Aggiunta di una colonna con constraints

E se invece volessi aggiungere la colonna age ma con il vincolo NOT NULL e un valore di default? Ecco il codice giusto:

ALTER TABLE students
ADD COLUMN age INTEGER NOT NULL DEFAULT 18;

Ora in tutte le righe già presenti il campo age avrà valore 18, e per i nuovi record dovrai per forza mettere un valore per questo campo, a meno che non usi il valore di default.

Rimozione di una colonna con dipendenze

Se una colonna ha delle dipendenze (tipo viene usata in una view o in un trigger), devi usare il modificatore CASCADE. Ma occhio: così potresti toccare anche altri oggetti nel tuo database. Per esempio:

ALTER TABLE students
DROP COLUMN email CASCADE;

Errori tipici e particolarità

Errore: aggiunta di una colonna con tipo di dato sbagliato.
Immagina di aggiungere una colonna di tipo INTEGER ma poi provi a metterci dentro dei testi. PostgreSQL non ti capirà e ti darà errore quando provi ad aggiungere i dati. Il tipo di dato deve sempre essere coerente con quello che ci vuoi mettere.

Errore: rimozione di una colonna senza considerare le dipendenze.
Per esempio, se togli una colonna a cui fanno riferimento indici o chiavi esterne, PostgreSQL potrebbe darti errore se non usi il modificatore CASCADE.

Errore: rimozione di una colonna con dipendenze. Per esempio, se togli una colonna a cui fanno riferimento indici o chiavi esterne, PostgreSQL potrebbe darti errore se non usi il modificatore CASCADE. L'hai aggiunto e hai eliminato migliaia di righe che puntavano alla colonna che hai tolto. Che magari non dovevi proprio cancellare : (

Particolarità: ordine delle modifiche.
A volte aggiungere colonne con vincoli richiede di sapere in che ordine fare le cose. Per esempio, se aggiungi una colonna con NOT NULL, prima devi riempirla con valori di default, altrimenti PostgreSQL ti darà errore.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION