SQLite prend en charge un sous-ensemble limité du standard SQL ALTER TABLE
déclaration.
Dans SQLite, le ALTER TABLE
La commande permet à l'utilisateur de renommer une table ou d'ajouter une nouvelle colonne à une table existante.
Ajouter une colonne
Le ADD COLUMN
La syntaxe est utilisée pour ajouter une nouvelle colonne à une table existante.
Ajoutons une colonne aux Artistes tableau :
ALTER TABLE Artists ADD COLUMN Bio TEXT;
Et puis vérifiez la table avec le .schema
commande :
sqlite> .schema Artists CREATE TABLE Artists( ArtistId INTEGER PRIMARY KEY, ArtistName TEXT NOT NULL , Bio TEXT);
Les restrictions suivantes s'appliquent lors de l'utilisation de ADD COLUMN
syntaxe en SQLite :
- La colonne peut ne pas avoir de
PRIMARY KEY
ouUNIQUE
contrainte. - La colonne peut ne 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 de NULL .
Renommer un tableau
Le RENAME TO
syntaxe permet de changer le nom d'une table.
Renommez une de nos tables :
ALTER TABLE Albums RENAME TO Albums1;
Et vérifiez-le avec un .tables
commande :
sqlite> .tables Albums1 Artists
Désormais, toute opération ultérieure devra utiliser le nouveau nom de la table. Nous pouvons donc sélectionner des données comme celle-ci :
SELECT AlbumName, Year FROM Artists AS a INNER JOIN Albums1 AS r ON a.ArtistId = r.ArtistId WHERE a.ArtistName = 'Joe Satriani';
AlbumName Year -------------------- -------------------------------------------------- Surfing with the Ali 1987 Flying in a Blue Dre 1989 Black Swans and Worm 2010
Mettre à jour ou supprimer des colonnes
SQLite ne prend pas en charge les clauses telles que DROP COLUMN
, ALTER COLUMN
, et ADD CONSTRAINT
, qui font partie du standard SQL.
Cependant, il existe d'autres façons de faire ces choses avec SQLite.
Modifier une colonne
Disons que nous voulons changer le nom de l'
Année
colonne à
ReleaseDate
. Aussi, nous voulons supprimer le NOT NULL
restriction.
Pour ce faire, vous pouvez créer une nouvelle table (avec la nouvelle définition de colonne), remplir la table avec les données de l'ancienne table, puis une fois terminé, supprimer l'ancienne table et renommer la nouvelle pour refléter le nom d'origine.
Créer le nouveau tableau
Tout d'abord, créez la nouvelle table (notez ReleaseDate
au lieu de Year
).
CREATE TABLE Albums( AlbumId INTEGER PRIMARY KEY, AlbumName TEXT NOT NULL, ReleaseDate TEXT, ArtistId INTEGER NOT NULL, FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId) );
Nous avons donc maintenant les tables suivantes dans notre base de données :
sqlite> .tables Albums Albums1 Artists
Insérer des données
Insérez ensuite les données de l'ancienne table.
Utilisez un INSERT
instruction qui sélectionne les données de l'ancienne table et les insère dans la nouvelle table. Comme ceci :
INSERT INTO Albums (AlbumId, AlbumName, ReleaseDate, ArtistId) SELECT AlbumId, AlbumName, Year, ArtistId FROM Albums1;
Vérifiez que les données ont été insérées dans la nouvelle table :
sqlite> SELECT * FROM Albums; AlbumId AlbumName ReleaseDate ArtistId -------- ------------------------------- ----------- ---------- 1 Killers 1981 7 2 Powerslave 1984 7 3 Surfing with the Alien 1987 1 4 Heavy as a Really Heavy Thing 1995 11 5 Yummy Yummy 1994 17 6 Out of the Loop 2007 6 7 Suck on This 1989 13 8 Pork Soda 1993 13 9 Sailing the Seas of Cheese 1991 13 10 Flying in a Blue Dream 1989 1 11 Black Swans and Wormhole Wizard 2010 1 12 Somewhere in Time 1986 7 13 Big Red Car 1995 17
Déposez l'ancienne table
Maintenant que la nouvelle table a été créée et remplie avec les données, nous avons le choix de supprimer l'ancienne table, de la modifier ou de la laisser telle quelle.
Laissons-le pour l'instant, nous le supprimerons plus tard.
Supprimer une colonne
Pour supprimer une colonne, vous pouvez créer une table à partir d'un SELECT
déclaration. Dans le SELECT
, omettez la ou les colonnes que vous souhaitez supprimer — SQLite créera uniquement les colonnes incluses dans le SELECT
déclaration.
CREATE TABLE Albums2 AS SELECT AlbumId, AlbumName, ArtistId FROM Albums1;
Et vérifiez ensuite que les données ont bien été insérées dans la nouvelle table :
sqlite> select * from Albums2; AlbumId AlbumName ArtistId -------- ------------------------------- ---------- 1 Killers 7 2 Powerslave 7 3 Surfing with the Alien 1 4 Heavy as a Really Heavy Thing 11 5 Yummy Yummy 17 6 Out of the Loop 6 7 Suck on This 13 8 Pork Soda 13 9 Sailing the Seas of Cheese 13 10 Flying in a Blue Dream 1 11 Black Swans and Wormhole Wizard 1 12 Somewhere in Time 7 13 Big Red Car 17
Nous avons donc maintenant les tables suivantes dans notre base de données :
sqlite> .tables Albums Albums1 Albums2 Artists