Créer · Lire · Mettre à jour · Supprimer
SQL (Structured Query Language) est le langage utilisé pour communiquer avec une base de données relationnelle. Il te permet de stocker, retrouver, modifier et supprimer des données de façon structurée.
Une base de données, c'est ton fichier de sauvegarde de jeu. SQL, c'est le menu qui te permet d'y accéder. CRUD = les 4 actions fondamentales : créer un personnage, voir ses stats, changer son équipement, le supprimer. Sans SQL, tu ne peux pas toucher à la sauvegarde.
Un ensemble organisé de données stockées sur un serveur. Elle contient plusieurs tables, comme un classeur Excel contient plusieurs feuilles.
Une table = un tableau avec des colonnes (les champs) et des lignes (les enregistrements). Chaque table représente un type d'objet : utilisateurs, produits, commandes...
Un identifiant unique pour chaque ligne. Généralement un id qui s'incrémente automatiquement. Il garantit qu'aucune ligne n'est identique.
Une instruction SQL envoyée à la base de données. Elle retourne un résultat (SELECT) ou modifie des données (INSERT, UPDATE, DELETE).
Un filtre qui précise sur quelles lignes la requête s'applique. Sans WHERE sur un UPDATE ou DELETE, toutes les lignes sont affectées.
Chaque colonne a un type : INT (entier), VARCHAR(n) (texte limité), TEXT (texte long), BOOLEAN, DATE... Le type définit ce qu'on peut stocker.
Ajoute une nouvelle ligne dans une table. On crée d'abord la table avec CREATE TABLE, puis on y insère des données.
-- Créer la table d'abord
CREATE TABLE joueurs (
id INT AUTO_INCREMENT PRIMARY KEY, -- id unique auto
nom VARCHAR(50) NOT NULL, -- texte obligatoire
level INT DEFAULT 1, -- valeur par défaut
classe VARCHAR(30) -- peut être NULL
);
-- Insérer un joueur
INSERT INTO joueurs (nom, level, classe)
VALUES ('Arthas', 60, 'Paladin');
-- Insérer plusieurs joueurs d'un coup
INSERT INTO joueurs (nom, level, classe)
VALUES
('Thrall', 60, 'Chaman'),
('Sylvanas', 60, 'Chasseur');
id — il se génère automatiquement grâce à AUTO_INCREMENT.Récupère des données depuis une table. C'est la requête la plus utilisée en SQL.
-- Tout récupérer (toutes les colonnes, toutes les lignes)
SELECT * FROM joueurs;
-- Colonnes spécifiques seulement
SELECT nom, level FROM joueurs;
-- Filtrer avec WHERE
SELECT * FROM joueurs WHERE level = 60;
SELECT * FROM joueurs WHERE classe = 'Paladin';
-- Trier les résultats
SELECT * FROM joueurs ORDER BY level DESC; -- du plus haut au plus bas
-- Limiter le nombre de résultats
SELECT * FROM joueurs LIMIT 5;
-- Conditions multiples
SELECT * FROM joueurs
WHERE level >= 50 AND classe = 'Paladin';
SELECT * retourne toutes les colonnes. En pratique, précise les colonnes dont tu as besoin — c'est plus rapide et plus lisible.Modifie des données existantes dans une table. Le WHERE est obligatoire.
-- Mettre à jour le level d'un joueur spécifique
UPDATE joueurs
SET level = 70
WHERE id = 1;
-- Modifier plusieurs colonnes à la fois
UPDATE joueurs
SET level = 70, classe = 'Chevalier de la mort'
WHERE nom = 'Arthas';
WHERE sur un UPDATE. Sans WHERE, toutes les lignes de la table sont modifiées.Supprime des lignes dans une table. Irréversible — à utiliser avec précaution.
-- Supprimer un joueur spécifique
DELETE FROM joueurs WHERE id = 2;
-- Supprimer tous les joueurs de level 1
DELETE FROM joueurs WHERE level = 1;
WHERE sur un DELETE. Sans WHERE, toute la table est vidée — irréversible.TRUNCATE TABLE joueurs est plus rapide que DELETE FROM joueurs sans WHERE.| ACTION | COMMANDE SQL | EXEMPLE MINIMAL | RISQUE SANS WHERE |
|---|---|---|---|
| CREATE | INSERT INTO |
INSERT INTO t (col) VALUES (val) |
Aucun |
| READ | SELECT |
SELECT * FROM t WHERE id = 1 |
Retourne tout |
| UPDATE | UPDATE SET |
UPDATE t SET col = val WHERE id = 1 |
Modifie tout ⚠️ |
| DELETE | DELETE FROM |
DELETE FROM t WHERE id = 1 |
Vide la table ⚠️ |
Crée une table personnages avec les colonnes id, nom et hp. Insère 3 personnages.
CREATE TABLE personnages (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(50) NOT NULL,
hp INT DEFAULT 100
);
INSERT INTO personnages (nom, hp)
VALUES
('Guerrier', 200),
('Mage', 80),
('Voleur', 120);
Récupère tous les personnages avec plus de 100 HP, triés du plus résistant au moins résistant. Affiche uniquement nom et hp.
SELECT nom, hp
FROM personnages
WHERE hp > 100
ORDER BY hp DESC;
Le Mage a été blessé, ses HP tombent à 40. Le Voleur quitte la partie. Affiche l'état final de la table.
-- Le mage prend des dégâts
UPDATE personnages
SET hp = 40
WHERE nom = 'Mage';
-- Le voleur quitte
DELETE FROM personnages
WHERE nom = 'Voleur';
-- État final de la table
SELECT * FROM personnages ORDER BY hp DESC;
-- UPDATE sans WHERE = catastrophe
UPDATE joueurs
SET level = 1;
-- Tous les joueurs repassent level 1 !
-- Toujours cibler avec WHERE
UPDATE joueurs
SET level = 1
WHERE id = 3;
-- Seulement le joueur id=3 est affecté
-- Comparer NULL avec =
SELECT * FROM joueurs
WHERE classe = NULL;
-- Retourne toujours 0 résultat !
-- NULL se teste avec IS NULL
SELECT * FROM joueurs
WHERE classe IS NULL;
-- IS NOT NULL pour l'inverse
-- Chaîne avec mauvaise casse
SELECT * FROM joueurs
WHERE nom = 'arthas';
-- Peut retourner 0 résultat si la BDD
-- est sensible à la casse
-- Respecter la casse ou utiliser LOWER()
SELECT * FROM joueurs
WHERE LOWER(nom) = 'arthas';
-- Fonctionne quelle que soit la casse
-- ══════════════════════════════════════════════════
-- SQL CRUD — Règles à ne jamais oublier
-- ══════════════════════════════════════════════════
-- 1. TOUJOURS un WHERE sur UPDATE et DELETE
UPDATE table SET col = val WHERE id = X; -- ✅
DELETE FROM table WHERE id = X; -- ✅
-- 2. NULL ne se compare pas avec =
WHERE col IS NULL -- ✅ correct
WHERE col = NULL -- ❌ retourne toujours rien
-- 3. SELECT * c'est bien pour déboguer, pas en production
SELECT nom, level FROM table; -- ✅ précis et rapide
SELECT * FROM table; -- OK pour explorer
-- 4. AUTO_INCREMENT gère l'id — ne jamais l'insérer manuellement
INSERT INTO t (nom) VALUES ('X'); -- ✅ id généré auto