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.