Refaire la création d'une base, de tables et de clés étrangères dans phpMyAdmin — l'interface web universelle des hébergements mutualisés. Même serveur MySQL, même SQL en dessous, autre habillage.
Tu sais maintenant créer une base, des tables et des clés étrangères avec HeidiSQL. Très bien — sauf que HeidiSQL n'est pas installé sur ton hébergement web. Là-bas, ce que tu trouveras dans le panneau d'administration, c'est presque toujours phpMyAdmin.
phpMyAdmin n'est pas un autre SGBDR : c'est un autre client. Il parle au même serveur MySQL dans la même langue (SQL). Tu vas le constater dans ce cours en refaisant tout le travail des deux séances précédentes — base, tables et clés étrangères — depuis l'interface web.
À la fin de cette séquence, tu seras capable de :
phpMyAdmin est une application web écrite en PHP. Elle est servie par Apache (le serveur web démarré par Laragon en même temps que MySQL).
┌──────────────────────────────┐
Toi, navigateur │ SERVEUR (ta machine) │
http://localhost │ │
│ │ ┌─────────────┐ │
└──── HTTP ──┼─►│ Apache │ │
│ │ sert │ │
│ │ phpMyAdmin (PHP) │
│ └──────┬──────┘ │
│ │ se connecte │
│ ▼ à MySQL │
│ ┌──────────────┐ │
│ │ MySQL │ ← même serveur que pour HeidiSQL
│ └──────────────┘ │
└──────────────────────────────┘
Tu ouvres phpMyAdmin dans un navigateur. Apache exécute le code PHP. Ce code se connecte à MySQL et te renvoie une page HTML avec les résultats.
💡 Sur un hébergement web réel, le scénario est identique. Le navigateur de l'admin (toi) parle à Apache distant, Apache parle au MySQL distant. Tu n'as rien à installer sur ta machine — c'est le grand intérêt.
Ton navigateur s'ouvre sur une URL du type http://localhost/phpmyadmin/.
Selon la configuration de Laragon, deux cas :
Utilisateur : root, mot de passe vide⚠️ Comme pour HeidiSQL :
rootsans mot de passe, uniquement en local. Sur un hébergement, on a un utilisateur dédié à la base.
billetterie que tu as créée au cours 08.🧠 Vérification importante : clique sur
billetteriedans le panneau gauche. Tu voisclient,evenement,ticket— avec leurs lignes ! C'est la preuve que phpMyAdmin et HeidiSQL parlent au même serveur. Tu peux gérer les mêmes données avec l'un ou l'autre indifféremment.
Pour bien voir l'équivalence, on va créer une nouvelle base billetterie_phpma et refaire dedans le travail complet : tables client, evenement, ticket avec ses FK.
Onglet Bases de données (en haut). Sous Créer une base de données :
| Champ | Valeur |
|---|---|
| Nom | billetterie_phpma |
| Interclassement | utf8mb4_unicode_ci |
Clique Créer. La base apparaît dans le panneau gauche.
clientClique sur billetterie_phpma dans le panneau gauche. Tu vois Aucune table dans la base de données. Formulaire Créer une table :
| Champ | Valeur |
|---|---|
| Nom | client |
| Nombre de colonnes | 5 |
Clique Créer. Tu arrives sur le tableau de définition des colonnes (une grosse grille).
| # | Nom | Type | Taille | NULL | Index | A_I |
|---|---|---|---|---|---|---|
| 1 | id |
INT |
— | non | PRIMARY | ☑ |
| 2 | nom |
VARCHAR |
100 |
non | — | — |
| 3 | prenom |
VARCHAR |
100 |
non | — | — |
| 4 | email |
VARCHAR |
150 |
oui | — | — |
| 5 | telephone |
VARCHAR |
20 |
oui | — | — |
💡 La colonne A_I (AUTO_INCREMENT) est une simple case à cocher dans phpMyAdmin. Pour la PK, sélectionne PRIMARY dans la colonne Index.
Tout en bas, clique Enregistrer.
Onglet SQL (en haut, ou bouton Aperçu SQL avant d'enregistrer) : phpMyAdmin te montre exactement la requête envoyée.
CREATE TABLE `billetterie_phpma`.`client` (
`id` INT NOT NULL AUTO_INCREMENT,
`nom` VARCHAR(100) NOT NULL,
`prenom` VARCHAR(100) NOT NULL,
`email` VARCHAR(150) NULL,
`telephone` VARCHAR(20) NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB;
🧠 Compare avec le SQL généré par HeidiSQL au cours 08. Tu verras qu'ils sont identiques (à quelques détails de mise en forme près). C'est la même langue, donc le même résultat — peu importe le client.
evenement et ticketRefais la procédure pour les deux autres tables.
| # | Nom | Type | Taille | NULL | Index | A_I |
|---|---|---|---|---|---|---|
| 1 | id |
INT |
— | non | PRIMARY | ☑ |
| 2 | titre |
VARCHAR |
200 |
non | — | — |
| 3 | date |
DATETIME |
— | non | — | — |
| 4 | prix_base |
DECIMAL |
6,2 |
non | — | — |
| # | Nom | Type | Taille | NULL | Index | A_I |
|---|---|---|---|---|---|---|
| 1 | id |
INT |
— | non | PRIMARY | ☑ |
| 2 | prix |
DECIMAL |
6,2 |
non | — | — |
| 3 | statut |
VARCHAR |
20 |
non | — | — |
| 4 | date_achat |
DATETIME |
— | non | — | — |
| 5 | client_id |
INT |
— | non | INDEX | — |
| 6 | evenement_id |
INT |
— | non | INDEX | — |
💡 Sur les colonnes FK, choisis l'index INDEX (pas PRIMARY). MySQL exige un index sur les colonnes qui serviront de clé étrangère — phpMyAdmin te demandera de toute façon de l'ajouter au moment de créer la contrainte si tu l'oublies maintenant.
Une fois la table ticket créée, ouvre-la (clic dans le panneau gauche) et va sur l'onglet Structure, puis sous-onglet Vue relationnelle (lien en bas de l'écran, parfois libellé Relation view ou Gestion des relations).
Tu obtiens un tableau pour configurer les FK. Pour chacune :
client_id → client.id| Champ | Valeur |
|---|---|
| Contrainte de clé étrangère | fk_ticket_client |
| Colonne | client_id |
| Base de données | billetterie_phpma |
| Table | client |
| Colonne | id |
| ON DELETE | RESTRICT |
| ON UPDATE | CASCADE |
evenement_id → evenement.id| Champ | Valeur |
|---|---|
| Contrainte de clé étrangère | fk_ticket_evenement |
| Colonne | evenement_id |
| Base de données | billetterie_phpma |
| Table | evenement |
| Colonne | id |
| ON DELETE | RESTRICT |
| ON UPDATE | CASCADE |
Clique Enregistrer. Si tu reçois une erreur :
INT NOT NULL)client_id et evenement_idOnglet SQL (en haut, après avoir sélectionné billetterie_phpma). Exécute :
-- Insérer un client et un événement valides
INSERT INTO client (nom, prenom) VALUES ('Test', 'Démo');
INSERT INTO evenement (titre, date, prix_base)
VALUES ('Démo phpMyAdmin', '2026-12-01 20:00:00', 10.00);
-- Récupérer les ids
SELECT * FROM client;
SELECT * FROM evenement;
Puis, avec les ids retournés (probablement 1 et 1) :
INSERT INTO ticket (prix, statut, date_achat, client_id, evenement_id)
VALUES (10.00, 'payé', '2026-11-25 18:00:00', 1, 1);
→ succès.
INSERT INTO ticket (prix, statut, date_achat, client_id, evenement_id)
VALUES (10.00, 'payé', '2026-11-25 18:00:00', 999, 1);
→ Erreur :
#1452 - Cannot add or update a child row: a foreign key constraint fails
Même erreur, même comportement qu'avec HeidiSQL. Confirmation : les contraintes vivent dans le serveur MySQL, pas dans le client.
C'est le cas d'usage typique du transfert vers un hébergement : tu as développé en local, tu veux mettre la même structure (et éventuellement les mêmes données) sur le serveur de production.
Reste pour l'instant dans phpMyAdmin sur la base billetterie (la première, celle du cours 08). Onglet Exporter :
DROP TABLE si tu veux écraser une base cible existanteClique Exécuter. Un fichier billetterie.sql est téléchargé.
💡 Ce fichier contient des
CREATE TABLE …et desINSERT INTO …. C'est du SQL pur, portable d'un serveur à l'autre.
Crée une nouvelle base billetterie_import (Partie 3, mais avec ce nom). Sélectionne-la, onglet Importer :
billetterie.sqlphpMyAdmin reproduit toutes les tables, contraintes et données. C'est exactement la procédure que tu utiliseras le jour où tu déploieras un projet sur un hébergement réel.
| Critère | HeidiSQL | phpMyAdmin |
|---|---|---|
| Type | Application desktop (Windows) | Application web (PHP) |
| Installation | À installer sur ta machine | Déjà fourni par presque tous les hébergeurs |
| Performance | Très rapide sur grosses tables | Plus lent (chaque action = requête HTTP) |
| Édition de données | Fluide, façon tableur | Correcte mais formulaires lourds |
| Requêtes SQL | Confortable, suggestions | OK, mais on quitte la page facilement |
| Accès distant | Possible (avec tunnel SSH) | Natif (URL publique) |
| Outils intégrés | Export/import, profileur, snapshots | Export/import, comptes utilisateurs, état serveur |
L'important : les deux outils sont équivalents pour ce qu'ils font — créer des bases, des tables, des contraintes, des requêtes. La différence est ergonomique.
Ouvre HeidiSQL. Connecte-toi au même serveur. Constate que la base billetterie_phpma (créée via phpMyAdmin) y est présente, avec ses tables et ses contraintes. Insère un client via HeidiSQL ; vérifie qu'il apparaît dans phpMyAdmin. Conclus.
Exporte une base depuis HeidiSQL (clic droit → Exporter la base). Importe le fichier obtenu dans phpMyAdmin (nouvelle base vierge). Vérifie que tout est là.
Sur l'écran d'accueil de phpMyAdmin, repère ces informations :
Refais l'ensemble de ton projet personnel dans phpMyAdmin, dans une nouvelle base. Toutes les tables et toutes les clés étrangères. Compare le SQL généré avec celui qu'avait produit HeidiSQL au cours 09.
Tu as maintenant toutes les compétences pour créer une base relationnelle bien construite, en local ou sur un hébergement. La prochaine étape — qui dépasse cette UAA — sera d'apprendre à interroger et manipuler les données par SQL pur : SELECT, INSERT, UPDATE, DELETE, puis les jointures pour exploiter les relations. Les articles existent déjà dans la section SQL du site.