Aller au contenu

ALTER TABLE#

courant

Syntaxe#

ALTER TABLE table RENAME TO nouveau_nom;
ALTER TABLE table RENAME COLUMN ancien_nom TO nouveau_nom;
ALTER TABLE table ADD COLUMN colonne type [contraintes];
ALTER TABLE table DROP COLUMN colonne;   -- SQLite ≥ 3.35

Exemples#

ALTER TABLE etudiants RENAME TO eleves;
ALTER TABLE eleves RENAME COLUMN nom TO nom_complet;
ALTER TABLE eleves ADD COLUMN email TEXT;
ALTER TABLE eleves DROP COLUMN email;

SQLite

Pas de ALTER COLUMN : impossible de changer un type ou d'ajouter une contrainte à une colonne existante.

ADD COLUMN : la colonne ajoutée ne peut pas être PRIMARY KEY ou UNIQUE, ni avoir DEFAULT CURRENT_TIME/DATE/TIMESTAMP, ni être NOT NULL sans DEFAULT.

Modifier une colonne (contournement) avancé#

Procédure recommandée par la documentation SQLite : créer la nouvelle table avant de supprimer l'ancienne, et encadrer le tout par une transaction.

PRAGMA foreign_keys = OFF;
BEGIN;

CREATE TABLE eleves_nouveau (
  id INTEGER PRIMARY KEY,
  nom TEXT NOT NULL,
  age INTEGER CHECK (age >= 0)
);

INSERT INTO eleves_nouveau (id, nom, age) SELECT id, nom, age FROM eleves;

DROP TABLE eleves;
ALTER TABLE eleves_nouveau RENAME TO eleves;

-- recréer ici les index, triggers et vues associés

PRAGMA foreign_key_check;
COMMIT;
PRAGMA foreign_keys = ON;

Warning

Ne pas utiliser CREATE TABLE tmp AS SELECT * FROM eleves; comme sauvegarde intermédiaire : cette forme perd les contraintes, les clés primaires et les affinités de type.