MySQL : la base de données la plus populaire du web
MySQL stocke les données de 80% des sites web (WordPress, Facebook, Twitter). C’est une base de données relationnelle : les données sont organisées en tables avec des lignes et des colonnes, comme un tableur Excel structuré.
Installer et accéder à MySQL
# Avec XAMPP (Windows/Mac) : MySQL est inclus, lancez-le depuis le panneau de contrôle
# Accédez à phpMyAdmin : http://localhost/phpmyadmin
# En ligne de commande :
mysql -u root -p
Créer une base de données et une table
-- Créer la base de données
CREATE DATABASE ecole_formation;
-- L'utiliser
USE ecole_formation;
-- Créer une table "etudiants"
CREATE TABLE etudiants (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
prenom VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE,
telephone VARCHAR(15),
formation VARCHAR(100),
date_inscription DATE DEFAULT CURRENT_DATE,
actif BOOLEAN DEFAULT TRUE
);
-- Créer une table "formations"
CREATE TABLE formations (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(150) NOT NULL,
duree_heures INT,
prix DECIMAL(10, 2),
categorie VARCHAR(50)
);
📌 Types de données courants
| Type | Usage | Exemple |
|---|---|---|
INT |
Nombres entiers | 25, 1000 |
VARCHAR(n) |
Texte court | Noms, emails |
TEXT |
Texte long | Descriptions |
DECIMAL(10,2) |
Prix, montants | 15000.00 FCFA |
DATE |
Dates | 2024-03-15 |
BOOLEAN |
Vrai/Faux | TRUE, FALSE |
CRUD : les 4 opérations fondamentales
CREATE — Insérer des données
-- Insérer un étudiant
INSERT INTO etudiants (nom, prenom, email, telephone, formation)
VALUES ('Diallo', 'Mamadou', 'mamadou@email.com', '771234567', 'Développement Web');
-- Insérer plusieurs en une fois
INSERT INTO etudiants (nom, prenom, email, formation) VALUES
('Ndiaye', 'Fatou', 'fatou@email.com', 'Marketing Digital'),
('Sow', 'Ibrahima', 'ibrahima@email.com', 'Cybersécurité'),
('Ba', 'Aissatou', 'aissatou@email.com', 'Design UX');
READ — Lire les données
-- Tous les étudiants
SELECT * FROM etudiants;
-- Colonnes spécifiques
SELECT nom, prenom, formation FROM etudiants;
-- Avec condition (WHERE)
SELECT * FROM etudiants WHERE formation = 'Développement Web';
-- Tri (ORDER BY)
SELECT * FROM etudiants ORDER BY nom ASC;
-- Limiter les résultats
SELECT * FROM etudiants LIMIT 10;
-- Recherche partielle (LIKE)
SELECT * FROM etudiants WHERE nom LIKE 'Di%'; -- Commence par "Di"
SELECT * FROM etudiants WHERE email LIKE '%gmail.com'; -- Termine par gmail.com
-- Compter
SELECT COUNT(*) AS total FROM etudiants;
SELECT formation, COUNT(*) AS nombre FROM etudiants GROUP BY formation;
UPDATE — Modifier des données
-- Modifier un étudiant (par son ID)
UPDATE etudiants SET telephone = '781234567' WHERE id = 1;
-- Modifier plusieurs champs
UPDATE etudiants
SET formation = 'IA & Data Science', actif = TRUE
WHERE email = 'mamadou@email.com';
-- ⚠️ TOUJOURS utiliser WHERE sinon TOUS les enregistrements sont modifiés !
DELETE — Supprimer des données
-- Supprimer un étudiant
DELETE FROM etudiants WHERE id = 5;
-- Supprimer les inactifs
DELETE FROM etudiants WHERE actif = FALSE;
-- ⚠️ TOUJOURS utiliser WHERE sinon TOUTE la table est vidée !
Les JOIN : relier les tables entre elles
-- Ajouter une clé étrangère
ALTER TABLE etudiants ADD formation_id INT;
ALTER TABLE etudiants ADD FOREIGN KEY (formation_id) REFERENCES formations(id);
-- JOIN : récupérer étudiants avec le nom de leur formation
SELECT e.nom, e.prenom, f.nom AS formation, f.prix
FROM etudiants e
INNER JOIN formations f ON e.formation_id = f.id;
-- LEFT JOIN : tous les étudiants, même sans formation
SELECT e.nom, e.prenom, f.nom AS formation
FROM etudiants e
LEFT JOIN formations f ON e.formation_id = f.id;
Requêtes utiles au quotidien
-- Étudiants inscrits ce mois
SELECT * FROM etudiants
WHERE MONTH(date_inscription) = MONTH(CURRENT_DATE)
AND YEAR(date_inscription) = YEAR(CURRENT_DATE);
-- Formation la plus populaire
SELECT formation, COUNT(*) AS inscrits
FROM etudiants
GROUP BY formation
ORDER BY inscrits DESC
LIMIT 1;
-- Chiffre d'affaires par formation
SELECT f.nom, f.prix, COUNT(e.id) AS inscrits,
f.prix * COUNT(e.id) AS chiffre_affaires
FROM formations f
LEFT JOIN etudiants e ON e.formation_id = f.id
GROUP BY f.id;
⚠️ Sécurité : injections SQL
Ne JAMAIS insérer directement des données utilisateur dans une requête :
// ❌ DANGEREUX (injection SQL possible)
$sql = "SELECT * FROM etudiants WHERE email = '$email'";
// ✅ SÉCURISÉ (requête préparée)
$stmt = $pdo->prepare("SELECT * FROM etudiants WHERE email = ?");
$stmt->execute([$email]);
Exercice pratique
🎯 Défi : Base de données pour un centre de formation
- Créez les tables :
formations,etudiants,inscriptions - Insérez 5 formations et 10 étudiants
- Écrivez une requête JOIN pour lister chaque étudiant avec sa formation
- Comptez le nombre d’étudiants par formation
- Trouvez la formation la plus chère et la moins chère