Avant de stocker la moindre donnée, il faut un endroit où la ranger. En SQL, cet endroit s'appelle une base de données, et on la crée avec l'instruction CREATE DATABASE. C'est l'une des premières commandes qu'on tape quand on démarre un nouveau projet — boutique en ligne, application mobile ou simple carnet d'adresses.
Une base de données peut contenir des tables (où vivent les données), des vues, des procédures stockées et des fonctions. Mais tout commence par CREATE DATABASE.
Étape 1 — Comprendre la syntaxe de base
CREATE DATABASE prend un seul argument obligatoire : le nom de la base. Ce nom doit être unique sur le serveur, composé uniquement de lettres, de chiffres et de tirets bas (_). Pas d'espaces, pas d'accents, pas de caractères spéciaux, et il ne peut pas commencer par un chiffre.
CREATE DATABASE nom_base;
Par exemple, pour créer une base dédiée à un site e-commerce :
CREATE DATABASE ecommerce;
Résultat attendu :
Query OK, 1 row affected (0.01 sec)
La base ecommerce est créée et prête à accueillir des tables. Elle est vide pour l'instant — CREATE DATABASE ne crée pas de tables automatiquement.
Étape 2 — Éviter les erreurs avec IF NOT EXISTS
Si on exécute CREATE DATABASE sur une base qui existe déjà, le serveur renvoie une erreur. Pour l'éviter — notamment dans des scripts d'installation qui tournent plusieurs fois — on utilise IF NOT EXISTS. Si la base existe, la commande ne fait rien et ne bloque pas le script.
-- MySQL / MariaDB : crée la base uniquement si elle n'existe pas encore CREATE DATABASE IF NOT EXISTS ecommerce; -- Sans IF NOT EXISTS : erreur si la base existe déjà -- ERROR 1007 (HY000): Can't create database 'ecommerce'; database exists
Résultat attendu (base créée) :
Query OK, 1 row affected (0.00 sec)
Résultat attendu (base déjà existante, avec IF NOT EXISTS) :
Query OK, 0 rows affected, 1 warning (0.00 sec)
⚠ IF NOT EXISTS est disponible sur MySQL et MariaDB. Sur PostgreSQL, la syntaxe équivalente existe depuis la version 9.3. Sur SQL Server, il n'existe pas — on vérifie l'existence avec une condition avant d'exécuter.
Étape 3 — Choisir l'encodage avec CHARSET et COLLATE
L'encodage (CHARACTER SET) détermine quels caractères peuvent être stockés. La collation (COLLATE) définit les règles de tri et de comparaison — par exemple, si "é" et "e" sont considérés identiques dans une recherche. Pour un site en français, on choisit un encodage qui gère les accents.
-- MySQL : encodage universel, tri insensible à la casse et aux accents CREATE DATABASE ecommerce CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- utf8mb4 : Unicode complet (emojis inclus), recommandé depuis MySQL 5.5 -- utf8mb4_unicode_ci : ci = case-insensitive, tri correct pour le français
Résultat attendu :
Query OK, 1 row affected (0.01 sec)
Si on omet CHARSET et COLLATE, MySQL utilise ses valeurs par défaut — souvent latin1 sur les anciennes installations, ce qui bloque les caractères arabes, chinois ou les emojis. Toujours préciser l'encodage en production.
Étape 4 — Syntaxe par SGBD : MySQL, PostgreSQL, SQL Server
La commande de base est identique partout, mais les options varient selon le système de gestion de base de données utilisé.
MySQL / MariaDB
-- MySQL : syntaxe complète avec encodage
CREATE DATABASE IF NOT EXISTS ecommerce
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
PostgreSQL
-- PostgreSQL : OWNER définit le propriétaire, ENCODING l'encodage CREATE DATABASE ecommerce OWNER = admin ENCODING = 'UTF8' LC_COLLATE = 'fr_FR.UTF-8' LC_CTYPE = 'fr_FR.UTF-8' TEMPLATE = template0; -- TEMPLATE = template0 : obligatoire quand on change l'encodage ou la locale
SQL Server
-- SQL Server : ON PRIMARY définit le fichier de données, LOG ON le journal CREATE DATABASE ecommerce ON PRIMARY ( NAME = ecommerce_data, FILENAME = 'C:\SQLData\ecommerce.mdf', SIZE = 100MB, MAXSIZE = 1GB, FILEGROWTH = 10% ) LOG ON ( NAME = ecommerce_log, FILENAME = 'C:\SQLData\ecommerce.ldf', SIZE = 10MB, MAXSIZE = 500MB, FILEGROWTH = 5MB ); -- SIZE : taille initiale allouée -- MAXSIZE : plafond pour éviter de saturer le disque -- FILEGROWTH : agrandissement automatique quand la base atteint sa taille
Résultat attendu (SQL Server) :
Commands completed successfully.
Étape 5 — Activer une base avec USE
Une fois la base créée, il faut indiquer au serveur avec laquelle on veut travailler. C'est le rôle de la commande USE. Sans elle, SQL ne sait pas où envoyer les requêtes suivantes.
-- Sélectionner la base active (MySQL, MariaDB, SQL Server) USE ecommerce; -- Toutes les requêtes suivantes s'exécutent dans ecommerce SELECT * FROM produits;
Résultat attendu :
Database changed
⚠ Sur PostgreSQL, USE n'existe pas. On change de base au moment de la connexion, ou via la commande \c ecommerce dans le client psql.
Récapitulatif : créer et activer une base en un seul script
Ce script rassemble les commandes essentielles dans l'ordre logique d'utilisation. Adaptez le SGBD cible en choisissant le bloc correspondant.
-- === MySQL / MariaDB === CREATE DATABASE IF NOT EXISTS ecommerce CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- Query OK, 1 row affected (0.01 sec) USE ecommerce; -- Database changed -- Vérifier que la base est bien créée SHOW DATABASES; -- ecommerce apparaît dans la liste -- === PostgreSQL === CREATE DATABASE ecommerce OWNER = admin ENCODING = 'UTF8' TEMPLATE = template0; -- CREATE DATABASE -- Connexion à la base dans psql : -- \c ecommerce -- === SQL Server === CREATE DATABASE ecommerce; -- Commands completed successfully. USE ecommerce; -- Changed database context to 'ecommerce'.
Commandes de gestion des bases de données
Après la création, SQL propose d'autres instructions pour administrer les bases :
- ALTER DATABASE : modifie les propriétés d'une base existante (taille, collation, etc.).
- DROP DATABASE : supprime définitivement une base et tout son contenu — irréversible.
- BACKUP DATABASE : sauvegarde une base dans un fichier (SQL Server).
- RESTORE DATABASE : restaure une base à partir d'une sauvegarde.
Ces commandes sont détaillées dans le chapitre suivant.
Par carabde | Mis à jour le 9 juin 2026