Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

INSERT, UPDATE, DELETE et transactions

Après cette leçon: Je peux modifier les données d'une table sans rien perdre.

Leçon de 50 min12 commandesLab MySQL et phpMyAdmin avec une base de boutique pour s’exercer en SQL

Tous les prix à zéro

INSERT, UPDATE et DELETE ajoutent, changent et suppriment des lignes d'une base de données, et une transaction permet de tout annuler en cas d'erreur.

Savoir s'en servir sans rien perdre évite qu'un oubli efface une table entière. Une épicière voulait baisser le prix du lait : elle a mis tous ses prix à zéro, parce qu'elle a oublié un petit mot.

À la fin de cette leçon

Remarque

Je peux modifier les données d'une table sans rien perdre.

Mots clés

MotCe que ça veut dire
INSERTajoute une ligne à une table
UPDATEchange les valeurs de lignes qui existent déjà
DELETEsupprime des lignes
Transactionun groupe de changements qui réussit en entier ou pas du tout
COMMITgarde pour toujours les changements d'une transaction
ROLLBACKannule les changements d'une transaction

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Voir, changer, revoir : trois temps pour modifier

INSERT ajoute une ligne. UPDATE change des lignes qui existent. Les deux écrivent dans la table, et un oubli coûte cher.

Prends un réflexe en trois temps. Voir : écris d'abord un SELECT avec la même condition. Changer : remplace SELECT par UPDATE. Revoir : relis la table.

Avant de commencer

Remarque

Appuie sur Start the lab dans la barre en haut et attends que la machine soit prête. Les deux Runs suivants servent à te connecter. Le deuxième crée un alias : un nom court, sql, pour une longue commande.

Accepter le certificat du serveur

Commande
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un nom court pour la boutique

Commande
alias sql='mariadb -h db -u student -pstudent shop -t -e'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Créer la base de ton épicerie

Commande
sql "CREATE DATABASE IF NOT EXISTS student_epicerie"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un nom court pour elle

Commande
alias epi='mariadb -h db -u student -pstudent student_epicerie -t -e'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Créer la table et y ajouter cinq articles

Commande
epi "DROP TABLE IF EXISTS articles; CREATE TABLE articles (id INT AUTO_INCREMENT PRIMARY KEY, nom VARCHAR(30) NOT NULL, stock INT NOT NULL DEFAULT 0, prix DECIMAL(5,2) NOT NULL); INSERT INTO articles (nom, stock, prix) VALUES ('Pates', 12, 1.20), ('Riz', 3, 1.80), ('Lait', 0, 0.95), ('Cafe', 2, 4.50), ('Sucre', 0, 1.10)"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Temps 1 : voir les articles presque épuisés

Commande
epi "SELECT id, nom, stock FROM articles WHERE stock < 5 ORDER BY id"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Temps 2 : ajouter 20 au stock de ceux-là

Commande
epi "UPDATE articles SET stock = stock + 20 WHERE stock < 5"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Temps 3 : revoir toute la table

Commande
epi "SELECT id, nom, stock FROM articles ORDER BY id"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

DELETE supprime, et il ne demande rien

DELETE FROM articles WHERE ... supprime les lignes qui réussissent la condition. La base ne demande pas « êtes-vous sûr ? ».

Applique le même réflexe : écris le SELECT d'abord. Une clé étrangère aide aussi : la base refuse de supprimer un client qui a encore des commandes.

Exemple : le réflexe en trois temps

TempsCe que tu écrisCe que tu vérifies
VoirSELECT id, nom FROM articles WHERE nom = 'Sucre'Une seule ligne, la bonne
ChangerDELETE FROM articles WHERE nom = 'Sucre'Même condition que le SELECT
RevoirSELECT id, nom, prix FROM articles ORDER BY idLa ligne a disparu, les autres restent

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Temps 1 : voir la ligne à supprimer

Commande
epi "SELECT id, nom FROM articles WHERE nom = 'Sucre'"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Temps 2 et 3 : supprimer, puis revoir

Commande
epi "DELETE FROM articles WHERE nom = 'Sucre'; SELECT id, nom, prix FROM articles ORDER BY id"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

Beaucoup pensent qu'un UPDATE ou un DELETE touche seulement la ligne à laquelle ils pensent. Sans WHERE, il touche toutes les lignes. Écris le WHERE avant le reste, et relis-le avant d'appuyer sur Entrée.

Une transaction permet d'annuler

Une transaction regroupe des changements. START TRANSACTION l'ouvre. COMMIT garde tout pour toujours. ROLLBACK défait tout depuis l'ouverture.

Sans transaction, chaque commande est gardée tout de suite et ne se défait plus. Chaque Run ouvre une session neuve : les étapes d'une transaction se tapent dans un seul Run.

Le même oubli de WHERE, puis ROLLBACK

Commande
epi "START TRANSACTION; UPDATE articles SET prix = 0; SELECT nom, prix FROM articles ORDER BY id; ROLLBACK; SELECT nom, prix FROM articles ORDER BY id"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un changement voulu, gardé avec COMMIT

Commande
epi "START TRANSACTION; UPDATE articles SET prix = 1.00 WHERE nom = 'Lait'; COMMIT; SELECT nom, prix FROM articles ORDER BY id"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

À toi : voir, changer, revoir

Code: sql
-- 1. Voir : quels articles sont presque épuisés ?
SELECT id, nom, stock FROM articles WHERE stock < 5;
-- 2. Changer : ajoute 10 au stock de ces articles seulement.
UPDATE articles SET stock = stock + 10 WHERE stock < 5;
-- 3. Revoir : le résultat est-il celui que tu attendais ?
SELECT id, nom, stock FROM articles ORDER BY id;

À propos de ce labo et de sa source: Lab MySQL et phpMyAdmin avec une base de boutique pour s’exercer en SQL

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.