Pourquoi apprendre MySQL ?
MySQL en quelques chiffres
- 2ème système de gestion de base de données le plus utilisé au monde
- Utilisé par Facebook, YouTube, Twitter, WordPress
- Plus de 20 ans d'existence (créé en 1995)
- Open-source et gratuit
Concepts fondamentaux
- Base de données relationnelle - Données organisées en tables
- SQL - Langage de requête structuré
- Tables - Collections de données organisées en lignes et colonnes
- Relations - Liens logiques entre les tables
1. Concepts des Bases de Données
Structure d'une Base de Données
Exemple de schéma de base de données
utilisateurs
id INT (PK)
nom VARCHAR
email VARCHAR
date_inscription DATETIME
articles
id INT (PK)
auteur_id INT (FK)
titre VARCHAR
contenu TEXT
date_publication DATETIME
commentaires
id INT (PK)
article_id INT (FK)
utilisateur_id INT (FK)
texte TEXT
date_commentaire DATETIME
Tables
Structure principale qui contient les données, comparable à une feuille de calcul avec des lignes (enregistrements) et des colonnes (champs).
Clé Primaire (PK)
Identifiant unique pour chaque enregistrement dans une table. Souvent un champ id
auto-incrémenté.
Clé Étrangère (FK)
Champ qui fait référence à une clé primaire dans une autre table, établissant une relation entre les tables.
2. SQL de Base
Commandes SQL Essentielles
CRUD - Les 4 opérations fondamentales
- CREATE - Insérer des données
- READ - Lire des données
- UPDATE - Mettre à jour des données
- DELETE - Supprimer des données
Syntaxe de base
-- Structure générale d'une requête SQL
SELECT colonnes
FROM table
WHERE condition
ORDER BY colonne
LIMIT nombre;
Exemples de Requêtes
Création de table
CREATE TABLE utilisateurs (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
mot_de_passe VARCHAR(255) NOT NULL,
date_inscription DATETIME DEFAULT CURRENT_TIMESTAMP
);
Insertion de données
INSERT INTO utilisateurs (nom, email, mot_de_passe)
VALUES ('Alice', 'alice@exemple.com', 'motdepassehashé');
Sélection de données
-- Sélectionner tous les utilisateurs
SELECT * FROM utilisateurs;
-- Sélectionner avec conditions
SELECT nom, email FROM utilisateurs
WHERE date_inscription > '2023-01-01'
ORDER BY nom ASC
LIMIT 10;
Mise à jour et suppression
-- Mettre à jour un utilisateur
UPDATE utilisateurs
SET email = 'nouvel@email.com'
WHERE id = 1;
-- Supprimer un utilisateur
DELETE FROM utilisateurs
WHERE id = 5;
3. Types de Données et Contraintes
Types de Données Courants
Type | Description | Exemple |
---|---|---|
INT |
Nombre entier | 42 |
VARCHAR(n) |
Chaîne de caractères (max n) | "Bonjour" |
TEXT |
Texte long | "Lorem ipsum..." |
DATE |
Date (sans heure) | "2023-05-15" |
DATETIME |
Date et heure | "2023-05-15 14:30:00" |
BOOLEAN |
Vrai/Faux | TRUE |
Contraintes de Table
PRIMARY KEY
Identifiant unique pour chaque ligne
FOREIGN KEY
Référence à une clé primaire dans une autre table
UNIQUE
Valeur doit être unique dans la colonne
NOT NULL
La colonne ne peut pas être vide
DEFAULT
Valeur par défaut si non spécifiée
AUTO_INCREMENT
Incrémente automatiquement (pour les PK)
Exemple Complet
CREATE TABLE commandes (
id INT AUTO_INCREMENT PRIMARY KEY,
utilisateur_id INT NOT NULL,
date_commande DATETIME DEFAULT CURRENT_TIMESTAMP,
montant DECIMAL(10,2) NOT NULL,
statut VARCHAR(20) DEFAULT 'en attente',
FOREIGN KEY (utilisateur_id) REFERENCES utilisateurs(id)
);
Exercice Pratique
Création d'une Base de Données pour un Blog
Créez un schéma de base de données pour un blog simple avec :
- Une table
utilisateurs
pour stocker les auteurs - Une table
articles
pour les posts du blog - Une table
commentaires
pour les réactions des lecteurs - Une table
categories
pour classer les articles - Une table de jointure
article_categorie
pour la relation many-to-many
Solution
-- Table utilisateurs
CREATE TABLE utilisateurs (
id INT AUTO_INCREMENT PRIMARY KEY,
pseudo VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
mot_de_passe VARCHAR(255) NOT NULL,
date_inscription DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Table articles
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
titre VARCHAR(255) NOT NULL,
contenu TEXT NOT NULL,
date_publication DATETIME DEFAULT CURRENT_TIMESTAMP,
auteur_id INT NOT NULL,
FOREIGN KEY (auteur_id) REFERENCES utilisateurs(id)
);
-- Table categories
CREATE TABLE categories (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(50) UNIQUE NOT NULL,
description TEXT
);
-- Table de jointure article_categorie
CREATE TABLE article_categorie (
article_id INT NOT NULL,
categorie_id INT NOT NULL,
PRIMARY KEY (article_id, categorie_id),
FOREIGN KEY (article_id) REFERENCES articles(id),
FOREIGN KEY (categorie_id) REFERENCES categories(id)
);
-- Table commentaires
CREATE TABLE commentaires (
id INT AUTO_INCREMENT PRIMARY KEY,
texte TEXT NOT NULL,
date_commentaire DATETIME DEFAULT CURRENT_TIMESTAMP,
article_id INT NOT NULL,
auteur_id INT NOT NULL,
FOREIGN KEY (article_id) REFERENCES articles(id),
FOREIGN KEY (auteur_id) REFERENCES utilisateurs(id)
);