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

Modifier les données sans risque

Après cette leçon: Je peux ajouter, modifier et supprimer des lignes sans risque.

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

Toutes les commandes annulées

Un développeur voulait annuler une seule commande. Il a oublié un petit mot à la fin de sa requête.

Les deux mille commandes de la base sont passées à « annulée », et le service client a téléphoné toute la matinée.

Modifier des données est facile. Ne modifier que les bonnes lignes est le vrai savoir-faire.

À la fin de cette leçon

Remarque

Je peux ajouter, modifier et supprimer des lignes sans risque.

Mots clés

MotCe que ça veut direExemple
INSERTajoute de nouvelles lignes à une table
UPDATEchange des valeurs dans des lignes qui existent
DELETEretire des lignes d'une table
Transactionun groupe de changements qui ont tous lieu ou aucun
Validationrend définitifs les changements d'une transactionCOMMIT
Annulationdéfait les changements d'une transactionROLLBACK

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

Travaillez sur une copie, jamais sur la boutique

Vous allez changer des données. La boutique doit rester intacte : faites d'abord une copie.

Ces Runs créent votre base student_copie, puis une table papeterie où vous recopiez les quatre articles de papeterie.

Relancez-les à tout moment pour repartir de zéro.

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 le client

Commande
alias bd='mariadb -h db -u student -pstudent -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 votre base

Commande
bd "CREATE DATABASE IF NOT EXISTS student_copie"

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.

Jeter une ancienne copie

Commande
bd "DROP TABLE IF EXISTS student_copie.papeterie"

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 de la copie

Commande
bd "CREATE TABLE student_copie.papeterie (id INT PRIMARY KEY, nom VARCHAR(100) NOT NULL, prix DECIMAL(8,2) NOT NULL, stock INT NOT NULL)"

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.

Recopier les articles de papeterie

Commande
bd "INSERT INTO student_copie.papeterie SELECT id, name, price, stock FROM shop.products WHERE category_id = 7"

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.

INSERT ajoute une ligne

INSERT INTO nomme la table et ses colonnes. VALUES donne une parenthèse de valeurs pour chaque nouvelle ligne.

Donnez les valeurs dans l'ordre des colonnes. Une colonne omise prend sa valeur par défaut, ou NULL.

Si une règle de clé est violée, la base refuse la ligne, comme dans la première leçon.

Ajouter un stylo à bille

Commande
bd "INSERT INTO student_copie.papeterie (id, nom, prix, stock) VALUES (200, 'Stylo bille', 1.80, 150)"

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.

UPDATE change des lignes, WHERE choisit lesquelles

UPDATE nomme la table. SET donne la nouvelle valeur. WHERE choisit les lignes.

Sans WHERE, toutes les lignes changent.

Le bon réflexe a trois temps. Écrivez un SELECT avec le même WHERE. Vérifiez qu'il montre les lignes voulues. Puis changez SELECT en UPDATE.

Temps 1 : regarder les lignes d'abord

Commande
bd "SELECT id, nom, prix FROM student_copie.papeterie WHERE prix < 10 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 : changer exactement celles-là

Commande
bd "UPDATE student_copie.papeterie SET prix = ROUND(prix * 1.1, 2) WHERE prix < 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 3 : regarder de nouveau

Commande
bd "SELECT id, nom, prix, stock FROM student_copie.papeterie 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.

À vous : le SELECT avant l'UPDATE

Code: sql
-- Avant un UPDATE, écrivez le SELECT qui a la même condition.
-- Quelles pièces passeraient à « a_commander » si le stock est sous 3 ?
SELECT id, nom, stock FROM pieces
WHERE stock < 3 AND statut = 'ok'
ORDER BY id;
-- Changez le seuil 3 en 5 : combien de lignes de plus ?

DELETE retire des lignes, pour de bon

DELETE FROM retire les lignes qui correspondent à son WHERE. Sans WHERE, il vide toute la table.

Il n'y a pas de corbeille. Les trois temps s'appliquent : SELECT d'abord, puis DELETE, puis SELECT de nouveau.

Le dernier Run montrait déjà la colonne stock : un seul article est à 0. C'est le premier temps.

Retirer les articles épuisés de la copie

Commande
bd "DELETE FROM student_copie.papeterie WHERE stock = 0"

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 qu'ils ont en tête. Il touche toutes les lignes qui correspondent, et sans WHERE ce sont toutes. Écrivez le WHERE d'abord et vérifiez-le avec un SELECT.

L'erreur, sur la copie seulement

Commande
bd "UPDATE student_copie.papeterie SET stock = 0"

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.

Voir ce qu'elle a fait

Commande
bd "SELECT id, nom, stock FROM student_copie.papeterie 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 transaction, c'est tout ou rien

Virer 50 € d'un compte à un autre fait deux changements. Si la machine tombe entre les deux, 50 € ont disparu.

Une transaction groupe les changements. COMMIT les rend tous définitifs. ROLLBACK les défait tous.

Tant que vous n'avez pas validé, personne d'autre ne voit les changements.

Le Run suivant envoie quatre instructions dans une même session. Il vide la copie dans une transaction, l'annule, puis compte les lignes.

Tout vider, puis tout annuler

Commande
bd "START TRANSACTION; DELETE FROM student_copie.papeterie; ROLLBACK; SELECT COUNT(*) AS toujours_la FROM student_copie.papeterie"

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.

Exemple : une panne à mi-chemin

ÉtapeCompte 1Compte 2Sans transactionAvec transaction
Départ200 €100 €CorrectCorrect
Après le premier changement150 €100 €50 € manquentPas encore définitif
Panne150 €100 €Reste fauxRetour à 200 € et 100 €
Deux changements et COMMIT150 €150 €CorrectCorrect

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

Voir le mode par défaut

Commande
bd "SELECT @@autocommit AS autocommit"

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.

À 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.