Aller au contenu

CREATE TABLE#

essentiel

Syntaxe#

CREATE TABLE [IF NOT EXISTS] nom_table (
  colonne type [contraintes],
  ...
  [contrainte_table]
);

Contraintes de colonne#

Contrainte Rôle
PRIMARY KEY Clé primaire essentiel
NOT NULL Interdit NULL essentiel
DEFAULT valeur Valeur par défaut essentiel
REFERENCES table(col) Clé étrangère essentiel
UNIQUE Valeur unique courant
CHECK (condition) Contrainte de validation courant
AUTOINCREMENT Interdit la réutilisation des rowid avancé
COLLATE nom Collation (BINARY, NOCASE, RTRIM) avancé
GENERATED ALWAYS AS (expr) [STORED\|VIRTUAL] Colonne calculée (≥ 3.31) avancé

Contraintes de table#

PRIMARY KEY (col1, col2)
FOREIGN KEY (col) REFERENCES autre_table(id) [ON DELETE CASCADE] [ON UPDATE CASCADE]
UNIQUE (col1, col2)
CHECK (condition)

Exemples#

CREATE TABLE villes (
  id INTEGER PRIMARY KEY,
  nom TEXT NOT NULL UNIQUE
);

CREATE TABLE etudiants (
  id INTEGER PRIMARY KEY,
  nom TEXT NOT NULL,
  age INTEGER CHECK (age >= 0),
  inscrit_le TEXT DEFAULT CURRENT_TIMESTAMP,
  ville_id INTEGER REFERENCES villes(id) ON DELETE SET NULL
);

CREATE TABLE ... AS SELECT courant#

CREATE TABLE copie AS SELECT * FROM etudiants WHERE age > 18;

Warning

La table créée ne reprend ni les contraintes, ni les clés primaires, ni les index de la table source : uniquement les noms de colonnes et les données.

Tables STRICT avancé#

Impose les types déclarés au lieu du typage dynamique (SQLite ≥ 3.37).

CREATE TABLE t (
  id INTEGER PRIMARY KEY,
  nom TEXT NOT NULL
) STRICT;

Types autorisés : INT, INTEGER, REAL, TEXT, BLOB, ANY. Voir Types.

Tables WITHOUT ROWID avancé#

Optimisation de stockage pour les tables à clé primaire non entière. Une PRIMARY KEY explicite est obligatoire.

CREATE TABLE parametres (
  cle TEXT PRIMARY KEY,
  valeur TEXT
) WITHOUT ROWID;

Les deux options se combinent : ) STRICT, WITHOUT ROWID;

SQLite

Les clés étrangères ne sont pas vérifiées par défaut : activer avec PRAGMA foreign_keys = ON; à chaque connexion.