Skip to content

CREATE TABLE – Créer une table

Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 6 minutes


La commande CREATE TABLE permet de créer une table en SQL. Un tableau est une entité qui est contenu dans une base de données pour stocker des données ordonnées dans des colonnes. La création d’une table sert à définir les colonnes et le type de données qui seront contenus dans chacune des colonnes (entier, chaîne de caractères, date, valeur binaire, etc.).


La syntaxe générale pour créer une table est la suivante :

CREATE TABLE nom_de_la_table (
colonne1 type_donnees [contraintes],
colonne2 type_donnees [contraintes],
colonne3 type_donnees [contraintes],
colonne4 type_donnees [contraintes]
);

Dans cette requête, les colonnes sont définies avec leur nom, leur type de données et éventuellement des contraintes.


Type de données Description Exemple
INT Nombres entiers 42, -15, 0
BIGINT Nombres entiers grands 99999999999
VARCHAR(n) Chaîne de caractères de longueur variable (max n) ‘Bonjour’
TEXT Chaîne de caractères longue ‘Un long texte…’
DATE Date (AAAA-MM-JJ) ‘2024-01-15’
DATETIME Date et heure ‘2024-01-15 14:30:00’
TIMESTAMP Horodatage (date et heure) ‘2024-01-15 14:30:00’
DECIMAL(p,s) Nombre décimal (p chiffres, s décimales) 99.99
FLOAT Nombre à virgule flottante 3.14159
BOOLEAN Valeur booléenne (VRAI/FAUX) TRUE / FALSE
BLOB Données binaires (images, fichiers) (données binaires)

Bon à savoir : Les types de données peuvent varier légèrement selon le SGBD. Consultez la documentation de votre SGBD pour connaître les types disponibles.


Il est également possible de définir des contraintes pour chaque colonne :

Contrainte Description
NOT NULL Empêche d’enregistrer une valeur nulle
DEFAULT Attribuer une valeur par défaut
PRIMARY KEY Définit la clé primaire (unique et non nulle)
UNIQUE Garantit l’unicité des valeurs
CHECK Valide une condition sur la valeur
FOREIGN KEY Définit une clé étrangère (référence à une autre table)

Imaginons que l’on souhaite créer une table utilisateur, dans laquelle chaque ligne correspond à un utilisateur inscrit sur un site web.

CREATE TABLE utilisateur (
id INT PRIMARY KEY NOT NULL,
nom VARCHAR(100),
prenom VARCHAR(100),
email VARCHAR(255),
date_naissance DATE,
pays VARCHAR(255),
ville VARCHAR(255),
code_postal VARCHAR(5),
nombre_achat INT DEFAULT 0
);

Explications détaillées des colonnes :

Colonne Type Contrainte Description
id INT PRIMARY KEY, NOT NULL Identifiant unique (clé primaire)
nom VARCHAR(100) - Nom de l’utilisateur (100 caractères max)
prenom VARCHAR(100) - Prénom de l’utilisateur
email VARCHAR(255) - Adresse email (255 caractères max)
date_naissance DATE - Date de naissance
pays VARCHAR(255) - Pays de résidence
ville VARCHAR(255) - Ville de résidence
code_postal VARCHAR(5) - Code postal (5 caractères)
nombre_achat INT DEFAULT 0 Nombre d’achats (0 par défaut)

Pour s’assurer que l’âge est positif :

CREATE TABLE personne (
id INT PRIMARY KEY,
nom VARCHAR(100),
age INT CHECK (age >= 0)
);

Pour garantir qu’un email n’est pas utilisé deux fois :

CREATE TABLE utilisateur (
id INT PRIMARY KEY,
email VARCHAR(255) UNIQUE,
nom VARCHAR(100)
);

Pour lier un utilisateur à une adresse :

CREATE TABLE adresse (
id INT PRIMARY KEY,
rue VARCHAR(255),
ville VARCHAR(255),
code_postal VARCHAR(5)
);
CREATE TABLE utilisateur (
id INT PRIMARY KEY,
nom VARCHAR(100),
adresse_id INT,
FOREIGN KEY (adresse_id) REFERENCES adresse(id)
);

Utilisation de l’option AUTO_INCREMENT (ou SERIAL)

Section titled “Utilisation de l’option AUTO_INCREMENT (ou SERIAL)”

Pour que l’identifiant soit généré automatiquement :

MySQL / MariaDB :

CREATE TABLE utilisateur (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100),
prenom VARCHAR(100)
);

PostgreSQL :

CREATE TABLE utilisateur (
id SERIAL PRIMARY KEY,
nom VARCHAR(100),
prenom VARCHAR(100)
);

SQL Server :

CREATE TABLE utilisateur (
id INT IDENTITY(1,1) PRIMARY KEY,
nom VARCHAR(100),
prenom VARCHAR(100)
);

SGBD Syntaxe particulière
MySQL / MariaDB AUTO_INCREMENT, INT sans précision
PostgreSQL SERIAL ou IDENTITY (v10+), INTEGER
SQL Server IDENTITY(start, increment), INT
Oracle NUMBER au lieu de INT, GENERATED BY DEFAULT AS IDENTITY (v12c+)

Créer une table à partir d’une autre (copie)

Section titled “Créer une table à partir d’une autre (copie)”
-- MySQL / PostgreSQL / SQL Server
CREATE TABLE utilisateur_backup AS SELECT * FROM utilisateur WHERE 1=0;
-- MySQL / PostgreSQL / SQL Server
CREATE TABLE utilisateur_backup AS SELECT * FROM utilisateur;

PostgreSQL (version plus robuste) :

CREATE TABLE utilisateur_backup (LIKE utilisateur INCLUDING ALL);

Les tables temporaires sont automatiquement supprimées à la fin de la session.

MySQL / MariaDB :

CREATE TEMPORARY TABLE tmp_utilisateur AS SELECT * FROM utilisateur WHERE pays = 'France';

PostgreSQL :

CREATE TEMPORARY TABLE tmp_utilisateur AS SELECT * FROM utilisateur WHERE pays = 'France';

SQL Server :

SELECT * INTO #tmp_utilisateur FROM utilisateur WHERE pays = 'France';

1. Choisir des noms de colonnes explicites

Section titled “1. Choisir des noms de colonnes explicites”
-- ❌ Noms peu clairs
CREATE TABLE u (i INT, n VARCHAR(100));
-- ✅ Noms explicites
CREATE TABLE utilisateur (id INT, nom VARCHAR(100));
CREATE TABLE utilisateur (
id INT PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
date_creation TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

3. Utiliser des types de données adaptés

Section titled “3. Utiliser des types de données adaptés”
-- ❌ Mauvais choix
CREATE TABLE produit (
prix VARCHAR(10)
);
-- ✅ Bon choix
CREATE TABLE produit (
prix DECIMAL(10,2)
);

4. Ajouter des index (nous verrons cela plus tard)

Section titled “4. Ajouter des index (nous verrons cela plus tard)”
CREATE INDEX idx_utilisateur_nom ON utilisateur(nom);
CREATE TABLE utilisateur (
id INT PRIMARY KEY,
nom VARCHAR(100),
date_creation TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
date_modification TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Erreur Cause Solution
Table already exists La table existe déjà Vérifier l’existence ou utiliser IF NOT EXISTS
Duplicate column name Colonne définie deux fois Vérifier les noms des colonnes
Cannot add foreign key constraint Clé étrangère sur une colonne inexistante Vérifier la table référencée
Invalid default value Valeur par défaut incorrecte Vérifier le type de données
Data type mismatch Type de données incohérent Vérifier la compatibilité des types

Vous savez désormais comment créer une table avec CREATE TABLE. Mais que faire si vous souhaitez modifier la structure d’une table existante ?

👉 Chapitre 29 : ALTER TABLE – Modifier une table


Bonne continuation !
Junior TSAFACK – 08/08/2026