Kodokon kodokon.com

Créer un schéma : CREATE TABLE et contraintes

Concevez vos propres tables avec des types adaptés et des contraintes NOT NULL, UNIQUE et PRIMARY KEY qui protègent vos données.

8 min · 3 questions

Ouvrir cette leçon dans Kodokon

Jusqu'ici vous interrogiez des tables toutes prêtes ; un développeur professionnel les conçoit. Un bon schéma refuse les données invalides au moment de l'insertion : c'est votre première ligne de défense, avant tout code applicatif. Dans sqliteonline.com ou sqlite3, créez cette table :

SQL
CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  email TEXT NOT NULL UNIQUE,
  username TEXT NOT NULL UNIQUE,
  created_at TEXT NOT NULL
    DEFAULT (datetime('now'))
);
Trois contraintes : NOT NULL, UNIQUE et une valeur par défaut.

SQLite ne connaît que cinq types de stockage : INTEGER, REAL, TEXT, BLOB et NULL. Les dates s'y stockent en TEXT au format ISO (2026-07-04). Ailleurs (PostgreSQL, MySQL), vous déclareriez plutôt VARCHAR(255), TIMESTAMP ou BOOLEAN : le principe reste identique, seuls les noms de types changent. Testez maintenant vos contraintes :

SQL
INSERT INTO users (email, username)
VALUES ('alice@example.com', 'alice');

INSERT INTO users (email, username)
VALUES ('alice@example.com', 'alice2');
La seconde insertion échoue : UNIQUE constraint failed.

La clé primaire identifie chaque ligne : jamais NULL, jamais dupliquée, une seule par table. En SQLite, INTEGER PRIMARY KEY a une particularité précieuse : la colonne s'auto-incrémente quand vous omettez sa valeur, comme dans les insertions ci-dessus. Sur PostgreSQL vous écririez GENERATED ALWAYS AS IDENTITY, sur MySQL AUTO_INCREMENT. Ajoutez enfin une règle métier avec CHECK :

SQL
CREATE TABLE products (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  sku TEXT NOT NULL UNIQUE,
  price REAL NOT NULL CHECK (price >= 0)
);

INSERT INTO products (name, sku, price)
VALUES ('Clavier', 'KB-01', -5);
Refusé : CHECK constraint failed. Aucun prix négatif ne passera.

Quiz de validation

Vérifiez que vous avez bien retenu les points clés de cette leçon.

  1. Quelle contrainte garantit qu'aucun doublon n'apparaît dans la colonne email ?
    • NOT NULL
    • UNIQUE
    • CHECK
    • DEFAULT
  2. Quelle est la différence entre PRIMARY KEY et UNIQUE ?
    • Aucune, ce sont des synonymes
    • La clé primaire identifie la ligne : une seule par table, jamais NULL
    • UNIQUE est plus strict que PRIMARY KEY
  3. En SQLite, que se passe-t-il si vous insérez une ligne sans valeur pour une colonne INTEGER PRIMARY KEY ?
    • Une erreur NOT NULL est levée
    • SQLite génère automatiquement un entier unique
    • La colonne reste à NULL