Corso
In SQL, esistono principalmente tre tipi di comandi:
-
DDL - acronimo di Data Definition Language, comprende i comandi SQL utilizzati per definire il database, inclusa la creazione di tabelle, la definizione delle specifiche, la modifica delle tabelle e così via. Esempi di DDL includono
CREATE,DROP,ALTER, ecc. Le modifiche apportate tramite comandi DDL non possono essere annullate. -
DML - acronimo di Data Manipulation Language, ti permette di eseguire query di select, insert, update e delete. Le modifiche apportate tramite comandi DML possono essere annullate. Esempi:
SELECT,INSERT,UPDATEeDELETE. -
DCL - acronimo di Data Control Language, ti consente di specificare diritti, permessi e altri controlli del sistema di database.
In questo tutorial vedrai l'uso dell'istruzione ALTER TABLE, che appartiene alla DDL. I seguenti contenuti saranno trattati in questo tutorial:
- Perché serve l'istruzione
ALTER TABLE - Creare una tabella in un database PostgreSQL
- Eseguire diverse istruzioni
ALTER TABLEin PostgreSQL
Nota: il tutorial non spiega come creare una tabella, inserire dati in una tabella o selezionare dati da una tabella in PostgreSQL. Se vuoi un ripasso su questi argomenti, puoi consultare questo articolo.
Perché serve l'istruzione ALTER TABLE
Le specifiche di un database possono cambiare nel tempo. Ad esempio, potresti dover aggiungere una colonna a una tabella specifica, oppure aggiungere un'altra chiave primaria a una tabella. Potresti anche dover cambiare il tipo di dato di una determinata colonna. Non sempre puoi permetterti di eliminare una tabella e ricrearla da zero. L'istruzione Alter Table ti permette di fare tutto questo in modo molto semplice. Con Alter Table puoi:
- Aggiungere, modificare o eliminare una colonna
- Aggiungere o eliminare un vincolo
Puoi anche abilitare/disabilitare i vincoli, ma questo non rientra nell'ambito di questo tutorial.
In questo tutorial vedrai ciascuno dei casi d'uso sopra, ma prima avrai bisogno di una tabella in PostgreSQL per iniziare. Nella prossima sezione, creerai una tabella semplice.
Creare una tabella in un database PostgreSQL
Creerai una tabella chiamata student_details in PostgreSQL (usando l'utility pgAdmin) con le seguenti colonne e tipi di dato:
- student_id (integer)
- student_full_name (character)
- student_year (integer)
Partirai da questa tabella composta da sole tre colonne. Più avanti, proseguendo nel tutorial, aggiungerai altre colonne e modificherai la tabella in modi diversi. La seguente query di creazione ti consentirà di creare una tabella secondo le specifiche sopra:
CREATE TABLE student_details(
student_id SERIAL,
student_full_name VARCHAR (50),
student_year VARCHAR (100)
);
Inseriamo anche qualche record in questa tabella:
INSERT INTO student_details(student_full_name, student_year) VALUES('John Doe','1st');INSERT INTO student_details(student_full_name, student_year) VALUES('Chris Villa','3rd');
Poiché il tipo di dato di student_id è impostato su SERIAL, PostgreSQL incrementerà automaticamente il valore della colonna e il tipo di dato verrà interpretato come integer per impostazione predefinita.
La tabella student_details dovrebbe apparire così:

Ora hai una tabella pronta in PostgreSQL. Vediamo ora un diverso utilizzo di Alter Table nella prossima sezione.
Eseguire diverse istruzioni ALTER TABLE in PostgreSQL
In questa sezione vedrai l'uso di Alter Table nei due modi indicati sopra:
- Aggiungere, modificare ed eliminare una colonna
- Aggiungere ed eliminare un vincolo
Aggiungere, modificare o eliminare una colonna
Iniziamo aggiungendo un'altra colonna chiamata student_grade (di tipo carattere) alla tabella:
ALTER TABLE student_details ADD student_grade VARCHAR(5);
Ora la tabella dovrebbe essere come segue:

Nota che per le righe già inserite i valori della colonna student_grade sono null. Questo è implicito nella maggior parte dei RDBMS. Tuttavia, puoi sempre eseguire una query di update per aggiornare i valori. Vediamo ora come modificare una colonna con Alter Table. Cambierai la dimensione massima consentita per la colonna student_year da 100 a 10, perché allocare troppo spazio per soli tre caratteri (student_year può essere 1st, 2nd o 3rd) non è molto pratico.
ALTER TABLE student_details ALTER COLUMN student_year TYPE VARCHAR(10);
Puoi vedere il risultato nella figura seguente:

Puoi anche rinominare una colonna. Vediamo come:
ALTER TABLE student_details RENAME student_id TO student_roll;
La query sopra rinomina la colonna student_id in student_roll. Puoi verificarlo anche con una query di select; il risultato dovrebbe essere simile alla figura seguente:

Vediamo ora come eliminare una colonna da una tabella:
ALTER TABLE student_details DROP COLUMN student_year;
La query elimina la colonna student_year e, dopo l'esecuzione, la tabella dovrebbe essere così:

Nota che se la colonna che stai eliminando è referenziata da un'altra tabella, potresti ricevere errori di violazione dell'integrità referenziale.
Ora vedrai come aggiungere ed eliminare vincoli a una tabella.
Aggiungere ed eliminare un vincolo.
La tabella student_details non ha una chiave primaria. La chiave primaria è una combinazione dei vincoli not null e unique. Impostiamo la colonna student_roll (aggiornata da student_id) come chiave primaria di student_details:
ALTER TABLE student_details ADD PRIMARY KEY (student_roll);
Puoi aggiungere anche altri vincoli; ad esempio, puoi aggiungere un vincolo check alla colonna student_grade in modo che i suoi valori siano sempre e solo A, B o C.
ALTER TABLE student_details ADD CONSTRAINT year_check CHECK (student_grade IN ('A', 'B', 'C'));
year_check è un nome segnaposto per il vincolo che stai aggiungendo alla tabella. Ora, se provi a inserire la seguente riga nella tabella, dovresti ottenere un errore:
INSERT INTO student_details(student_full_name, student_grade) VALUES('David Lune','3rd');
L'errore è simile al seguente:

Eliminare un vincolo è analogo. Devi specificare il nome del vincolo che vuoi eliminare. Eliminiamo il vincolo che hai chiamato year_check:
ALTER TABLE student_details DROP CONSTRAINT year_check;
Verifichiamolo. Se il vincolo year_check è stato effettivamente eliminato, allora questa query INSERT INTO student_details(student_full_name, student_grade) VALUES('David Lune','3rd'); non dovrebbe causare alcun errore. La tabella ora contiene il record:

Puoi sperimentare anche con altri vincoli di tipo check.
Questo è tutto per il tutorial!
Questo tutorial ti ha presentato l'istruzione Alter Table per modificare in modo efficace lo schema di una tabella. Se vuoi migliorare le tue competenze SQL, potrebbero interessarti i seguenti corsi offerti da DataCamp:

