SQLite
 sql >> Base de données >  >> RDS >> SQLite

SQLite - Modifier une table

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 ou UNIQUE 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 que NULL .
  • 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