Passer au contenu principal
eLearner.app
Module 9 · Leçon 3 sur 435/57 dans le cours~10 min
Leçons du module (3/4)

Modifier la structure : ALTER TABLE

Les besoins d'une application évoluent avec le temps et la base de données doit suivre le rythme. ALTER TABLE est la commande (extrêmement polyvalente) dédiée à la modification des schémas de table existants sans avoir à les supprimer (risquant les données qu'ils contiennent).

Modification des colonnes (ADD / DROP / ALTER)

L'ajout d'une colonne demande du soin. Si la table contient déjà des données, l'ajout d'une colonne "NOT NULL" générera une erreur dans Postgres : que doit-il insérer dans les anciennes lignes ? Vous devez associer 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;

Pas seulement ajouter ou supprimer : vous devez souvent reconfigurer le type d'une colonne ou l'une de ses contraintes :

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;

Ajout de contraintes au moment de l'exécution

Tout comme avec CREATE TABLE, nous pouvons utiliser ALTER TABLE pour attacher un CONSTRAINT à une table déjà utilisée dans l'application de production.

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;

Renommer

Les colonnes et les tables peuvent être renommées :

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

Essayez-le

Exercice#sql.m9.l3.e1
Tentatives : 0Chargement…

La table « produits » comporte actuellement une colonne « nom ». Modifiez le tableau en renommant la colonne « nom » en « titre ». Utilisez l'opération RENOMMER LA COLONNE.

Chargement de l'éditeur…
Afficher l'indice

Syntaxe : ALTER TABLE ... RENOMMER LA COLONNE ... EN ...

Solution disponible après 3 tentatives

Ajout de contraintes en post-production

Exercice#sql.m9.l3.e2
Tentatives : 0Chargement…

Modifiez la table 'products' en ajoutant une contrainte CHECK (nommée 'verifica_prezzo') qui nécessite que le prix (colonne 'price') soit supérieur à 0. La contrainte doit être ajoutée sans supprimer la colonne d'origine.

Chargement de l'éditeur…
Afficher l'indice

Syntaxe : ALTER TABLE table ADD CONSTRAINT nom CHECK (...)

Solution disponible après 3 tentatives