Semaine 3 - Jour 1 : Introduction à MySQL
1. Qu'est-ce que MySQL ?
MySQL est un système de gestion de base de données relationnelle (SGBDR) open-source. Il permet de stocker, organiser et récupérer des données de manière structurée.
Concepts clés
- Base de données (Database) : Conteneur principal qui regroupe des tables
- Table : Structure organisée en lignes et colonnes, comme un tableau Excel
- Colonne (Champ) : Définit un type de données (nom, email, age...)
- Ligne (Enregistrement) : Une entrée complète dans la table
- Clé primaire (PRIMARY KEY) : Identifiant unique pour chaque enregistrement
- Clé étrangère (FOREIGN KEY) : Relie deux tables entre elles
2. Types de données MySQL
Types numériques
| Type |
Description |
Exemple |
| INT |
Nombre entier (-2 147 483 648 à 2 147 483 647) |
42 |
| BIGINT |
Grand nombre entier |
9223372036854775807 |
| DECIMAL(10,2) |
Nombre décimal exact (10 chiffres, 2 après virgule) |
12345.67 |
| FLOAT / DOUBLE |
Nombre décimal approximatif |
3.14159 |
Types texte
| Type |
Taille max |
Usage |
| CHAR(n) |
n caractères (fixe) |
Code postal, code pays |
| VARCHAR(n) |
n caractères (variable) |
Nom, email, titre |
| TEXT |
65 535 caractères |
Description, commentaire |
| LONGTEXT |
4 GB |
Articles, contenu long |
Types date et heure
| Type |
Format |
Exemple |
| DATE |
YYYY-MM-DD |
2026-01-08 |
| TIME |
HH:MM:SS |
14:30:00 |
| DATETIME |
YYYY-MM-DD HH:MM:SS |
2026-01-08 14:30:00 |
| TIMESTAMP |
Horodatage Unix |
Auto-généré |
3. Créer une base de données
CREATE DATABASE
CREATE DATABASE mon_site;
CREATE DATABASE mon_site
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
DROP DATABASE mon_site;
USE mon_site;
4. Créer des tables
CREATE TABLE - Table utilisateurs
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
prenom VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
date_naissance DATE,
ville VARCHAR(100),
actif BOOLEAN DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Explication :
AUTO_INCREMENT : L'id s'incrémente automatiquement (1, 2, 3...)
PRIMARY KEY : Identifiant unique obligatoire
NOT NULL : Le champ ne peut pas être vide
UNIQUE : Pas de doublons (ici, un email = un utilisateur)
DEFAULT : Valeur par défaut si non spécifiée
CREATE TABLE - Table articles avec clé étrangère
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
titre VARCHAR(200) NOT NULL,
contenu TEXT NOT NULL,
user_id INT NOT NULL,
statut ENUM('brouillon', 'publié', 'archivé') DEFAULT 'brouillon',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
ON DELETE CASCADE :
Si un utilisateur est supprimé, tous ses articles seront automatiquement supprimés.
5. Opérations CRUD de base
INSERT - Insérer des données
INSERT INTO users (nom, prenom, email, password, ville)
VALUES ('Dupont', 'Jean', 'jean.dupont@example.com', 'hashed_password', 'Paris');
INSERT INTO users (nom, prenom, email, password)
VALUES
('Martin', 'Marie', 'marie.martin@example.com', 'pass123'),
('Durand', 'Paul', 'paul.durand@example.com', 'pass456');
SELECT - Récupérer des données
SELECT * FROM users;
SELECT nom, prenom, email FROM users;
SELECT * FROM users WHERE ville = 'Paris';
SELECT * FROM users
WHERE ville = 'Paris' AND actif = 1;
SELECT * FROM users WHERE email LIKE '%@example.com';
SELECT * FROM users LIMIT 10;
SELECT * FROM users ORDER BY nom ASC;
SELECT * FROM users ORDER BY created_at DESC;
UPDATE - Modifier des données
UPDATE users
SET ville = 'Lyon', updated_at = NOW()
WHERE id = 1;
UPDATE users
SET nom = 'Nouveau Nom', prenom = 'Nouveau Prenom'
WHERE email = 'jean.dupont@example.com';
UPDATE users SET actif = 0;
DELETE - Supprimer des données
DELETE FROM users WHERE id = 5;
DELETE FROM users WHERE actif = 0 AND created_at < '2025-01-01';
DELETE FROM users;
Attention ! Utilisez toujours une clause WHERE avec UPDATE et DELETE, sinon TOUTES les lignes seront affectées ! Testez d'abord avec un SELECT pour vérifier votre condition.
6. Jointures (JOIN)
INNER JOIN - Récupérer des données de plusieurs tables
SELECT
articles.titre,
articles.contenu,
users.nom,
users.prenom
FROM articles
INNER JOIN users ON articles.user_id = users.id;
SELECT
a.titre,
a.contenu,
u.nom,
u.prenom
FROM articles AS a
INNER JOIN users AS u ON a.user_id = u.id;
LEFT JOIN - Inclure les lignes sans correspondance
SELECT
u.nom,
u.prenom,
COUNT(a.id) AS nb_articles
FROM users u
LEFT JOIN articles a ON u.id = a.user_id
GROUP BY u.id;
7. Fonctions d'agrégation
COUNT, SUM, AVG, MIN, MAX
SELECT COUNT(*) AS total_users FROM users;
SELECT COUNT(*) FROM users WHERE actif = 1;
SELECT
u.nom,
COUNT(a.id) AS nb_articles
FROM users u
LEFT JOIN articles a ON u.id = a.user_id
GROUP BY u.id;
SELECT
u.nom,
COUNT(a.id) AS nb_articles
FROM users u
LEFT JOIN articles a ON u.id = a.user_id
GROUP BY u.id
HAVING nb_articles > 5;
8. Modifier une table existante
ALTER TABLE
ALTER TABLE users ADD telephone VARCHAR(20);
ALTER TABLE users MODIFY telephone VARCHAR(15);
ALTER TABLE users CHANGE telephone tel VARCHAR(15);
ALTER TABLE users DROP tel;
DROP TABLE articles;
Note : MySQL stocke les données de manière persistante sur le disque dur, contrairement aux variables PHP qui disparaissent après l'exécution du script. C'est essentiel pour les applications web !
Froggiesplaining
Ribbit ribbit ! 🐸
Les bases de données, c'est comme mon journal de chasse aux mouches ! Chaque table est comme une catégorie (mouches bleues, mouches vertes...), et chaque ligne est une mouche que j'ai attrapée avec ses caractéristiques (taille, goût, heure de capture).
Types de données :
- INT = Nombre de mouches attrapées (1, 2, 3...)
- VARCHAR = Type de mouche ("bleue", "verte")
- TEXT = Mes commentaires détaillés sur chaque mouche
- DATETIME = Quand j'ai attrapé la mouche
Clé primaire (PRIMARY KEY) : C'est comme le numéro unique de chaque mouche dans mon journal - impossible d'avoir deux mouches avec le même numéro !
Clé étrangère (FOREIGN KEY) : Si j'ai une table "mares" et une table "mouches", la clé étrangère relie chaque mouche à sa mare d'origine. Comme ça, je sais d'où vient chaque mouche !
Astuce SQL : Testez toujours vos requêtes UPDATE et DELETE avec un SELECT d'abord ! Comme moi, je regarde bien avant de sauter sur un nénuphar !