MySQL : le guide complet pour débuter
MySQL est l’un des systèmes de gestion de bases de données (SGBD) relationnels les plus utilisés au monde. Il fait tourner d’innombrables applications web, de la petite boutique en ligne aux plateformes à très grand trafic. Sa popularité tient à un équilibre solide entre simplicité de prise en main, performances et gratuité de son édition Community. Ce guide vous accompagne des premiers pas — installation, vocabulaire — jusqu’aux requêtes courantes que tout développeur doit maîtriser.
Qu’est-ce qu’un SGBD relationnel ?
Une base relationnelle organise les données en tables, sortes de tableaux à colonnes et à lignes. Chaque table décrit un type d’entité (des clients, des produits, des commandes), chaque colonne un attribut (nom, prix, date), et chaque ligne un enregistrement concret. Les tables se relient entre elles par des valeurs communes, ce qui évite de répéter l’information.
MySQL parle le SQL (Structured Query Language), le langage standard pour interroger et modifier ces données. On distingue le serveur MySQL (le moteur qui stocke et traite) des clients (outils ou programmes qui lui envoient des requêtes). MySQL est aujourd’hui développé par Oracle, avec un fork communautaire nommé MariaDB, largement compatible.
Installer MySQL
Sous Linux (Debian/Ubuntu), l’installation passe par le gestionnaire de paquets :
sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation
Le script mysql_secure_installation configure le mot de passe root et supprime les comptes de test. Sous Windows et macOS, le plus simple est de télécharger l’installeur officiel depuis le site de MySQL, ou d’utiliser un environnement complet comme XAMPP (qui embarque MySQL/MariaDB, PHP et Apache) pour un poste de développement.
Une fois le serveur lancé, on se connecte au client en ligne de commande :
mysql -u root -p
Créer une base et une table
Toute la suite se passe dans le client SQL. On commence par créer une base de données, puis on la sélectionne :
CREATE DATABASE boutique;
USE boutique;
Vient ensuite la création d’une table avec CREATE TABLE. On y déclare chaque colonne, son type, et d’éventuelles contraintes.
CREATE TABLE clients (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE,
ville VARCHAR(80),
inscrit_le DATE DEFAULT (CURRENT_DATE)
);
Décortiquons cette table :
id INT AUTO_INCREMENT PRIMARY KEY: un identifiant entier généré automatiquement à chaque insertion, qui sert de clé primaire (identifiant unique de la ligne).NOT NULL: la colonne ne peut pas rester vide.UNIQUE: deux clients ne peuvent pas partager le même email.DEFAULT: une valeur par défaut si aucune n’est fournie.
Les types de données courants
Choisir le bon type améliore la fiabilité et les performances. Voici les familles à connaître.
CREATE TABLE produits (
id INT AUTO_INCREMENT PRIMARY KEY,
libelle VARCHAR(120), -- chaîne de longueur variable
reference CHAR(8), -- chaîne de longueur fixe
prix DECIMAL(10,2), -- nombre décimal exact (idéal monnaie)
stock INT, -- entier
poids FLOAT, -- nombre à virgule flottante
actif BOOLEAN, -- vrai/faux (stocké en TINYINT)
ajoute_le DATETIME, -- date + heure
fiche TEXT -- texte long
);
Pour les montants, préférez toujours DECIMAL à FLOAT : le premier stocke une valeur exacte, le second peut introduire de minuscules erreurs d’arrondi inacceptables en comptabilité. Pour les dates, DATE suffit quand l’heure n’importe pas, sinon DATETIME ou TIMESTAMP.
Insérer des données : INSERT
INSERT INTO ajoute des lignes. On peut préciser les colonnes concernées, ce qui est recommandé pour la lisibilité.
INSERT INTO clients (nom, email, ville) VALUES
('Dupont', '[email protected]', 'Paris'),
('Martin', '[email protected]', 'Lyon'),
('Bernard', '[email protected]', 'Nantes');
Les colonnes non citées (id, inscrit_le) prennent leur valeur automatique ou par défaut. On peut insérer plusieurs lignes en une seule instruction, comme ci-dessus, ce qui est plus rapide que des INSERT séparés.
Lire des données : SELECT
SELECT est la commande la plus utilisée. Sa forme minimale lit toutes les colonnes de toutes les lignes :
SELECT * FROM clients;
En pratique, on nomme les colonnes voulues et on filtre avec WHERE.
Filtrer avec WHERE
SELECT nom, ville
FROM clients
WHERE ville = 'Paris';
Les conditions se combinent avec AND, OR, NOT, et acceptent des opérateurs comme >, <, <> (différent), BETWEEN, IN ou LIKE pour les recherches textuelles.
SELECT nom FROM clients
WHERE ville IN ('Paris', 'Lyon')
AND nom LIKE 'D%'; -- commence par D
Trier et limiter
ORDER BY trie le résultat, LIMIT en restreint le nombre de lignes.
SELECT nom, inscrit_le
FROM clients
ORDER BY inscrit_le DESC
LIMIT 10;
Agréger avec GROUP BY
Les fonctions d’agrégat (COUNT, SUM, AVG, MAX, MIN) résument des groupes de lignes.
SELECT ville, COUNT(*) AS nb_clients
FROM clients
GROUP BY ville
HAVING COUNT(*) > 1;
HAVING filtre les groupes, là où WHERE filtre les lignes avant regroupement.
Modifier des données : UPDATE
UPDATE change des valeurs existantes. La clause WHERE y est cruciale : sans elle, toutes les lignes sont modifiées.
UPDATE clients
SET ville = 'Marseille'
WHERE id = 2;
Prenez l’habitude de tester d’abord votre condition avec un SELECT portant le même WHERE, pour vérifier quelles lignes seront touchées avant de lancer l’UPDATE.
Supprimer des données : DELETE
Même logique pour DELETE, tout aussi dangereux sans WHERE.
DELETE FROM clients
WHERE id = 3;
Pour vider entièrement une table plus efficacement, TRUNCATE TABLE clients réinitialise aussi le compteur AUTO_INCREMENT, mais reste irréversible.
Contraintes et clés étrangères
Les contraintes garantissent la cohérence des données. La plus importante après la clé primaire est la clé étrangère, qui relie deux tables et empêche les références orphelines.
CREATE TABLE commandes (
id INT AUTO_INCREMENT PRIMARY KEY,
client_id INT NOT NULL,
montant DECIMAL(10,2),
FOREIGN KEY (client_id) REFERENCES clients(id)
);
Ici, impossible d’insérer une commande dont le client_id ne correspond à aucun client existant. Ce mécanisme est détaillé dans notre guide sur la clé primaire et la clé étrangère en SQL, qui explique aussi les actions en cascade.
Les index : accélérer les recherches
Un index est une structure annexe qui accélère les recherches sur une colonne, à la manière d’un index de livre. MySQL crée automatiquement un index sur les clés primaires et uniques ; on en ajoute d’autres sur les colonnes fréquemment filtrées ou triées.
CREATE INDEX idx_ville ON clients(ville);
Un index accélère les lectures mais ralentit légèrement les écritures et consomme de l’espace. Il faut donc les poser avec discernement, sur les bonnes colonnes.
Combiner les tables : les jointures
Puisque les données sont réparties dans plusieurs tables, on les recombine à la lecture grâce aux jointures. Voici un aperçu reliant clients et commandes :
SELECT clients.nom, commandes.montant
FROM clients
INNER JOIN commandes ON clients.id = commandes.client_id;
Les jointures sont un pilier du SQL, avec plusieurs variantes (INNER, LEFT, RIGHT). Le sujet mérite un guide dédié, que vous trouverez ci-dessous.
Les outils pour travailler avec MySQL
Au-delà du client en ligne de commande, plusieurs interfaces graphiques facilitent la vie :
- MySQL Workbench : l’outil officiel, pour concevoir des schémas, exécuter des requêtes et administrer le serveur.
- phpMyAdmin : interface web très répandue chez les hébergeurs mutualisés, pratique pour gérer une base sans installer de logiciel.
- DBeaver ou Adminer : alternatives légères et multi-SGBD appréciées des développeurs.
Pour aller plus loin
Vous disposez maintenant des fondations : créer une base, définir des tables typées, insérer, lire, modifier et supprimer des données, et poser les premières contraintes et index. La suite logique consiste à approfondir les jointures, les sous-requêtes et l’optimisation. MySQL récompense la pratique régulière : montez une petite base de test et manipulez-la sans crainte, quitte à la recréer.