Dans SQLite, vous pouvez utiliser le ALTER TABLE
instruction pour ajouter une colonne à une table existante.
C'est en fait l'une des rares choses que vous pouvez faire avec ALTER TABLE
déclaration dans SQLite. Les seules choses que vous pouvez faire avec ALTER TABLE
L'instruction dans SQLite consiste à renommer une table, à renommer une colonne et à ajouter une nouvelle colonne à une table existante.
Exemple 1
Imaginons que nous ayons le tableau suivant :
CREATE TABLE Cats(
CatId INTEGER PRIMARY KEY,
CatName
);
Et nous voulons maintenant ajouter une colonne appelée DOB . Nous pourrions le faire en utilisant le code suivant :
ALTER TABLE Cats ADD COLUMN DOB;
C'est aussi simple que cela.
Restrictions
Vous pouvez également fournir d'autres spécifications à la définition, telles que des contraintes, etc., mais il existe certaines restrictions.
En particulier :
- La nouvelle colonne ne peut pas avoir de
PRIMARY KEY
ouUNIQUE
contrainte. - La nouvelle colonne ne peut pas avoir une valeur par défaut de
CURRENT_TIME
,CURRENT_DATE
,CURRENT_TIMESTAMP
, ou une expression entre parenthèses. - Si un
NOT NULL
contrainte est spécifiée, alors la colonne doit avoir une valeur par défaut autre queNULL
. - Si les contraintes de clé étrangère sont activées et une colonne avec un
REFERENCES
clause est ajoutée, la colonne doit avoir une valeur par défaut deNULL
. - Si la nouvelle colonne est une colonne générée, elle ne peut pas être
STORED
colonne. Il peut s'agir d'unVIRTUAL
colonne cependant.
Exemple 2
Voici un autre exemple, cette fois j'ajoute quelques spécifications supplémentaires à la définition de la nouvelle colonne :
CREATE TABLE Dogs(
DogId INTEGER PRIMARY KEY,
DogName
);
Et nous voulons maintenant ajouter une colonne appelée DOB . Nous pourrions le faire en utilisant le code suivant :
ALTER TABLE Dogs
ADD COLUMN Score NOT NULL DEFAULT 0;
Vérifiez les modifications
Il existe plusieurs façons de vérifier la structure d'une table dans SQLite.
Une façon est d'utiliser le PRAGMA table_info()
déclaration.
PRAGMA table_info(Dogs);
Résultat :
cid name type notnull dflt_value pk --- ------- ------- ---------- ---------- -- 0 DogId INTEGER 0 1 1 DogName 0 0 2 Score 1 0 0
Nous pouvons voir la nouvelle colonne, et nous pouvons voir qu'elle a un NOT NULL
contrainte, et que sa valeur par défaut est 0 .