Pour créer une table dans SQLite, utilisez le CREATE TABLE
déclaration.
Cette instruction accepte le nom de la table, les noms des colonnes et leurs définitions, ainsi que d'autres options.
Exemple
Voici un exemple de base.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY AUTOINCREMENT,
ProductName TEXT NOT NULL,
Price NUMERIC
);
Donc dans ce cas, Products
est le nom de la table et contient trois colonnes ; ProductId
, ProductName
, et Price
.
Dans cet exemple, j'ai ajouté le type de données de chaque colonne ainsi que certaines contraintes, mais elles sont toutes facultatives.
Spécifier le schéma
Le nom de la table peut (éventuellement) être précédé du nom du schéma. Lorsque vous faites cela, le nom du schéma doit être soit main
, temp
, ou le nom d'une base de données attachée.
Je pourrais donc faire ceci à la place :
CREATE TABLE Store.Products(
ProductId,
ProductName,
Price
);
Dans ce cas, Store
est le nom de la base de données attachée dans laquelle je veux créer la table.
Le nom de la colonne peut être suivi du type de données et de toute contrainte.
Le type de données est facultatif
Oui, vous avez bien lu - le type de données est en fait facultatif.
SQLite utilise le typage dynamique. Ainsi, le type de données d'une valeur est associé à la valeur elle-même, et non à son conteneur (colonne). Cela contraste avec la plupart des autres systèmes de base de données SQL, où vous devez spécifier le type de données lorsque vous créez la colonne.
Je pourrais donc faire ceci à la place :
CREATE TABLE Products(
ProductId,
ProductName,
Price
);
Contraintes et autres options
Vous avez la possibilité de spécifier les contraintes ou autres options que vous souhaitez appliquer à chaque colonne. Il s'agit notamment des éléments suivants :
DEFAULT
clause. Cela spécifie une valeur ou une expression par défaut pour chaque colonne de la table.- Le
COLLATE
clause pour spécifier le nom d'une séquence de classement à utiliser comme séquence de classement par défaut pour la colonne. La valeur par défaut est BINAIRE. PRIMARY KEY
clause. Vous pouvez éventuellement spécifier qu'une colonne est une clé primaire. Les clés primaires à colonne unique et composites (colonnes multiples) sont prises en charge dans SQLite.- SQLite prend également en charge les contraintes UNIQUE, NOT NULL, CHECK et FOREIGN KEY.
- Une contrainte de colonne générée (également appelée colonne calculée). Ce sont des colonnes dont les valeurs sont fonction des autres colonnes de la même ligne.
- Si la table est un
WITHOUT ROWID
table. Il s'agit d'une technique d'optimisation des performances qui omet la colonne "rowid" qui est une colonne spéciale que SQLite utilise par défaut. Pour plus d'informations sur cette technique, consultez la documentation SQLite.
Tableaux temporaires
Vous pouvez spécifier qu'une table est une table temporaire en utilisant soit le TEMP
ou TEMPORARY
mot-clé.
Si vous utilisez l'un de ces mots-clés, ils doivent être insérés entre le CREATE
et TABLE
.
Voici un exemple :
CREATE TEMP TABLE Products(
ProductId,
ProductName,
Price
);
Vous pouvez également ajouter le temp
schéma si vous le souhaitez.
Voir Comment créer une table temporaire pour plus d'exemples de création de tables temporaires dans SQLite.
Créer un tableau à partir d'un autre tableau
Vous pouvez également utiliser un CREATE TABLE ... AS SELECT
pour créer une nouvelle table basée sur une autre table. Lorsque vous faites cela, la nouvelle table est remplie avec les données du SELECT
instruction (qui sélectionne les données d'une ou plusieurs autres tables).
Voici un exemple de base :
CREATE TABLE Store.Products2 AS
SELECT * FROM Store.Products;
Cet exemple crée une nouvelle table appelée Products2
et le remplit avec toutes les données des Products
table.
Tous les noms de colonne sont les mêmes que dans le tableau d'origine.
Il est important de noter que les tables créées de cette manière n'ont pas de PRIMARY KEY et aucune contrainte d'aucune sorte. De plus, la valeur par défaut de chaque colonne est NULL
. De plus, la séquence de classement par défaut pour chaque colonne de la nouvelle table est BINARY.