1. Le DDL : Construire le Squelette de votre Base de Données
Le DDL (Data Definition Language) est le langage de l'architecte. Avant de pouvoir placer le moindre livre (INSERT), nous devons d'abord construire la bibliothèque (CREATE TABLE), définir les étagères (colonnes) et poser les règles (contraintes). Chaque instruction DDL modifie la structure de la base de données elle-même.
CREATE TABLE : Construire une Étagère
La commande CREATE TABLE définit une nouvelle table, ses colonnes et les "règles" (contraintes) pour chaque colonne.
Types de Données Courants :
| Type de Donnée |
Description |
Exemple d'utilisation |
| INT ou INTEGER |
Nombres entiers. |
id, age, quantite |
| VARCHAR(n) |
Chaîne de caractères de longueur variable (avec un maximum de n caractères). |
nom, email, titre |
| DECIMAL(p, s) |
Nombre décimal avec une précision totale p et s chiffres après la virgule. |
prix, salaire, montant |
| DATE |
Date au format AAAA-MM-JJ. |
date_naissance |
| TIMESTAMP |
Date et heure précises, souvent utilisées pour tracer les modifications. |
date_creation, derniere_maj |
Contraintes Courantes :
| Contrainte |
Description |
| PRIMARY KEY |
La "carte d'identité" d'une ligne. Chaque valeur est unique et ne peut jamais être NULL. Identifie de manière unique chaque ligne de la table. |
| NOT NULL |
Empêche la colonne d'être vide. Si un champ est essentiel (comme un nom d'utilisateur), il est marqué comme NOT NULL. |
| UNIQUE |
Garantit que toutes les valeurs de la colonne sont différentes, mais, contrairement à la clé primaire, elle peut contenir des valeurs NULL. |
| DEFAULT valeur |
Assigne une valeur par défaut si aucune n'est fournie lors de l'insertion. |
| AUTO_INCREMENT |
(Spécifique à MySQL/SQLite) Incrémente automatiquement la valeur pour chaque nouvelle ligne (idéal pour les id). |
| FOREIGN KEY |
La "clé de référence". Elle crée un lien entre les tables, garantissant que les données existent dans la table "parente". Par exemple, l'ID d'un auteur dans la table articles doit exister dans la table auteurs. C'est l'essence même des bases de données relationnelles. |
Exemple de création de table :
CREATE TABLE utilisateurs (
id INT PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
date_inscription TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ALTER TABLE : Modifier la structure
Le développement n'est pas statique. Les besoins évoluent, et la structure de la base de données doit s'adapter. ALTER TABLE permet de modifier une table existante sans la reconstruire.
- Ajouter une colonne : ALTER TABLE clients ADD COLUMN telephone VARCHAR(20);
- Modifier une contrainte : ALTER TABLE clients ALTER COLUMN email SET NOT NULL;
DROP TABLE : Supprimer une structure
Attention : Utilisez cette commande avec la plus grande prudence. Elle supprime définitivement une table et toutes les données qu'elle contient, sans possibilité de retour en arrière.
2. Le DML : Remplir et Gérer les Étagères
Le DML (Data Manipulation Language) est le langage de l'action. Une fois que la structure est en place, le DML nous permet d'interagir avec les données : les créer, les lire, les mettre à jour et les supprimer (l'acronyme CRUD). C'est le cœur de l'utilisation quotidienne de SQL.
INSERT INTO : Ajouter des Données (Create)
-- Insérer un seul utilisateur
INSERT INTO utilisateurs (nom, email)
VALUES ('Alice Martin', 'alice@example.com');
-- Insérer plusieurs utilisateurs en une seule commande
INSERT INTO utilisateurs (nom, email, date_inscription)
VALUES
('Bob Durand', 'bob@example.com', '2024-02-10 10:00:00'),
('Charlie Dupont', 'charlie@example.com', '2024-03-22 15:30:00');
SELECT : Lire des Données (Read)
C'est la commande que vous utiliserez le plus. Elle est incroyablement puissante.
-- Sélectionner toutes les colonnes (*) de tous les utilisateurs
SELECT * FROM utilisateurs;
-- Sélectionner des colonnes spécifiques pour ne voir que ce qui est pertinent
SELECT nom, email FROM utilisateurs;
-- Filtrer les résultats avec WHERE pour trouver des informations précises
SELECT * FROM utilisateurs WHERE nom = 'Alice Martin';
SELECT * FROM utilisateurs WHERE id > 1;
-- Utiliser LIKE pour des recherches partielles (% est un joker)
SELECT * FROM utilisateurs WHERE email LIKE '%@example.com';
-- Combiner des conditions avec AND et OR
SELECT * FROM utilisateurs WHERE nom LIKE 'A%' AND date_inscription > '2024-01-01';
-- Trier les résultats avec ORDER BY (ASC pour ascendant est le défaut)
SELECT * FROM utilisateurs ORDER BY nom ASC;
SELECT * FROM utilisateurs ORDER BY date_inscription DESC; -- DESC pour décroissant
-- Limiter le nombre de résultats avec LIMIT (utile pour la pagination)
SELECT * FROM utilisateurs ORDER BY date_inscription DESC LIMIT 2; -- Les 2 utilisateurs les plus récents
Filtrage avancé :
- IN : Pour vérifier si une valeur fait partie d'une liste. C'est une version plus concise de plusieurs conditions OR.
SELECT * FROM utilisateurs WHERE id IN (1, 3, 5);
- BETWEEN : Pour filtrer par un intervalle de valeurs. Très utile pour les dates ou les nombres.
SELECT * FROM utilisateurs WHERE date_inscription BETWEEN '2024-01-01' AND '2024-03-31';
UPDATE : Mettre à Jour des Données (Update)
Cette commande vous permet de modifier des valeurs existantes. La clause WHERE est votre bouée de sauvetage ! Pensez à toujours exécuter un SELECT avec la même condition WHERE pour vérifier les lignes qui seront affectées avant d'exécuter l'UPDATE.
Attention : Oublier la clause WHERE dans un UPDATE mettra à jour toutes les lignes de la table ! C'est une erreur classique et potentiellement désastreuse.
UPDATE utilisateurs
SET email = 'alice.martin@newdomain.com'
WHERE id = 1;
DELETE : Supprimer des Données (Delete)
Comme pour UPDATE, la clause WHERE est vitale. La bonne pratique consiste à toujours utiliser une condition WHERE pour cibler les lignes à supprimer.
Attention : Oublier la clause WHERE dans un DELETE supprimera toutes les lignes de la table ! Soyez extrêmement prudent.
DELETE FROM utilisateurs WHERE id = 2;