SQL pour les (presque) vivants : commandes de base pour MySQL/MariaDB
Bienvenue dans le monde merveilleux des bases de données relationnelles. Un monde où la logique règne, les données sont bien rangées, et où une simple erreur de requête peut ruiner une journée de travail.
Que vous soyez admin sys, développeur, étudiant ou kamikaze en production, voici un tour d’horizon des commandes SQL de base à connaître pour survivre (et briller en réunion).
Mais d’abord, c’est quoi une base de données relationnelle ?
- Base de données (DB) : conteneur logique pour stocker des données organisées. Comme un classeur, mais numérique et potentiellement explosif.
- Table : ensemble structuré de données, sous forme de lignes et de colonnes. Comme une feuille Excel, mais avec du respect.
- Enregistrement (ou ligne) : une ligne d’une table. Une entité de données (un utilisateur, un produit, un crime, etc.).
- Champ : une colonne dans la table, représentant un attribut (nom, âge, date…).
MySQL/MariaDB est un système de gestion de bases de données (SGBD) relationnel populaire, léger, efficace, et… parfois capricieux.
Connexion à MySQL/MariaDB
mysql -u root -p
On vous demandera le mot de passe. Tapez-le (sans retour visuel) et vous voilà dans le prompt :
mysql>
Créer une base de données
CREATE DATABASE boutique;
Elle existe maintenant dans les limbes numériques. Mais encore vide.
Créer un utilisateur et lui donner des droits
CREATE USER 'paul'@'localhost' IDENTIFIED BY 'motdepassefort'; GRANT ALL PRIVILEGES ON boutique.* TO 'paul'@'localhost'; FLUSH PRIVILEGES;
localhost
signifie que l’utilisateur se connecte depuis la machine locale.- Les droits peuvent être
SELECT
,INSERT
,UPDATE
,DELETE
… ouALL
pour les fous de pouvoir.
Utiliser une base de données
USE boutique;
Vous êtes désormais dans la base boutique
. Toute requête s’appliquera ici.
Créer une table
CREATE TABLE produits ( id INT AUTO_INCREMENT PRIMARY KEY, nom VARCHAR(100), prix DECIMAL(10,2), en_stock BOOLEAN );
Ici, on crée une table produits
avec :
- un identifiant auto-incrémenté
- un nom (chaine jusqu’à 100 caractères)
- un prix (avec 2 décimales)
- un champ booléen pour la disponibilité
Insérer des données
INSERT INTO produits (nom, prix, en_stock) VALUES ('Couteau suisse', 49.99, TRUE);
Ajoute un enregistrement. La valeur id
est automatique.
Lire les données : SELECT
SELECT * FROM produits;
Affiche toutes les colonnes de tous les produits. Pour filtrer :
SELECT nom, prix FROM produits WHERE en_stock = TRUE;
Tri :
SELECT * FROM produits ORDER BY prix DESC;
Mettre à jour des données
UPDATE produits SET prix = 39.99 WHERE nom = 'Couteau suisse';
On baisse les prix. Pour une fois.
Supprimer des données
DELETE FROM produits WHERE en_stock = FALSE;
Supprime les produits hors stock. RIP.
Afficher la structure d’une table
DESCRIBE produits;
Utile pour savoir ce qu’on manipule avant de tout casser.
Commandes de gestion des utilisateurs
SHOW GRANTS FOR 'paul'@'localhost'; REVOKE INSERT ON boutique.* FROM 'paul'@'localhost'; DROP USER 'paul'@'localhost';
REVOKE
retire des droits. DROP USER
efface l’utilisateur (ainsi que ses rêves).
Commandes utiles supplémentaires
SHOW DATABASES;
: liste les bases disponiblesSHOW TABLES;
: liste les tables de la base actuelleSELECT NOW();
: affiche la date/heure actuelleEXIT;
: quitte MySQL (et retourne à la vraie vie)
Précautions et bonne pratiques
- Ne travaillez jamais en tant que root sauf pour créer des utilisateurs.
- Sauvegardez avant un
DROP
. - Utilisez les transactions (
START TRANSACTION
,COMMIT
) pour les modifications critiques. - Ajoutez des index sur les colonnes utilisées dans les
WHERE
etJOIN
.
Conclusion : SQL, c’est de la logique… jusqu’au moment où ça plante
Le langage SQL est relativement simple à lire et à écrire. Mais comme tout outil puissant, il devient dangereux quand mal compris. Une requête mal formulée peut modifier ou supprimer des milliers de lignes. Ou planter un site entier.
Mais bien utilisé, SQL est une bénédiction pour organiser, structurer et interroger les données. Un langage de la vérité. Sauf quand on oublie le WHERE
.