MySQL — Créer et structurer la base de données
Tables, colonnes, clés primaires, clés étrangères et SQL de base
Concepts Théoriques
Jusqu'ici, les articles de DevBlog étaient stockés dans un tableau PHP — ils disparaissent à chaque rechargement. Pour des données persistantes, vous avez besoin d'une base de données. MySQL est le système de base de données le plus utilisé avec PHP.
Qu'est-ce qu'une base de données relationnelle ?
Une base de données relationnelle stocke les données dans des tables (comme des feuilles Excel). Chaque table a des colonnes (les champs) et des lignes (les enregistrements). Les tables sont liées entre elles par des clés étrangères — c'est le "relationnel".
Exemple pour DevBlog :
- Table articles : id, title, slug, content, category_id, user_id, created_at
- Table categories : id, name, slug, color
- Table users : id, name, email, password, role
- Table comments : id, article_id, user_name, email, content, created_at
La colonne category_id dans articles pointe vers l'id dans categories — c'est une relation.
phpMyAdmin
phpMyAdmin est une interface web pour gérer MySQL, installée avec XAMPP. Accédez-y à http://localhost/phpmyadmin. Vous pouvez y créer des bases, des tables, et exécuter du SQL.
Types de colonnes
- INT — nombre entier (id, compteur, âge)
- VARCHAR(255) — texte court avec une longueur max (titre, nom, email, slug)
- TEXT — texte long sans limite pratique (contenu d'un article)
- DATETIME — date et heure (2026-03-21 14:30:00)
- BOOLEAN / TINYINT(1) — vrai/faux (0 ou 1)
- DECIMAL(10,2) — nombre décimal précis (prix)
- ENUM('val1','val2') — une valeur parmi une liste prédéfinie
Clé primaire et auto-increment
Chaque table DOIT avoir une clé primaire (PRIMARY KEY) — une colonne qui identifie de manière unique chaque ligne. En général, c'est une colonne id de type INT avec AUTO_INCREMENT : MySQL attribue automatiquement le prochain numéro.
Clés étrangères (relations)
Une clé étrangère lie une table à une autre. category_id INT REFERENCES categories(id) signifie "cette colonne contient l'id d'une catégorie existante". La base de données refuse d'insérer un article avec un category_id qui n'existe pas — c'est l'intégrité référentielle.
SQL de base — les 4 opérations CRUD
- CREATE : INSERT INTO articles (title, content) VALUES ('Mon titre', 'Mon contenu')
- READ : SELECT * FROM articles WHERE published = 1 ORDER BY created_at DESC
- UPDATE : UPDATE articles SET title = 'Nouveau titre' WHERE id = 1
- DELETE : DELETE FROM articles WHERE id = 1
> Bonne pratique : Ajoutez TOUJOURS une clause WHERE sur UPDATE et DELETE. Sans WHERE, vous modifiez ou supprimez TOUTES les lignes de la table.