Polarys

Performance et écriture

INSERT, UPDATE, DELETE en sécurité

INSERT, UPDATE, DELETE en sécurité

Modifier des données : les trois commandes de base

INSERT INTO clients (nom, ville) VALUES ('Bernard', 'Marseille');

UPDATE clients SET ville = 'Nantes' WHERE id = 5;

DELETE FROM clients WHERE id = 5;

Le danger d'un WHERE oublié

UPDATE clients SET ville = 'Nantes';
DELETE FROM clients;

Sans clause WHERE, un UPDATE modifie toutes les lignes de la table, un DELETE les supprime toutes. C'est l'une des erreurs les plus destructrices et les plus fréquentes en SQL, souvent liée à une simple omission ou une exécution accidentelle avant d'avoir fini d'écrire la condition.

La transaction : tester avant de valider

BEGIN;
UPDATE clients SET ville = 'Nantes' WHERE ville = 'Nates';  -- faute de frappe
SELECT * FROM clients WHERE ville = 'Nantes';  -- vérifier le résultat avant de valider
ROLLBACK;  -- annuler si le résultat ne correspond pas à l'attendu
-- ou COMMIT; pour valider définitivement si c'est correct

Une transaction permet de tester une modification, vérifier son résultat, puis décider de la valider (COMMIT) ou de l'annuler entièrement (ROLLBACK), un filet de sécurité précieux pour toute modification en production.

Cas concret

Un administrateur souhaite mettre à jour le statut d'un seul client mais exécute par erreur UPDATE clients SET statut = 'inactif'; sans clause WHERE, en oubliant de la taper avant d'appuyer sur Entrée. Sans transaction, les milliers de clients de la table passent instantanément en statut inactif, une erreur difficile à corriger sans sauvegarde récente. Avec l'habitude de toujours travailler dans une transaction (BEGIN avant, vérification, puis COMMIT ou ROLLBACK), l'erreur aurait été détectée et annulée avant toute conséquence réelle.

Erreurs fréquentes

  • Exécuter UPDATE ou DELETE sans clause WHERE, la cause la plus fréquente et la plus destructrice d'incidents SQL en production.
  • Ne jamais utiliser de transaction pour une modification risquée en production, se privant d'un filet de sécurité simple à mettre en place.
  • Tester une requête DELETE directement en production sans l'avoir d'abord transformée en SELECT pour vérifier quelles lignes seraient réellement affectées.

À retenir

  • Un UPDATE ou DELETE sans clause WHERE affecte absolument toutes les lignes de la table, une erreur destructrice fréquente.
  • Une transaction (BEGIN / vérification / COMMIT ou ROLLBACK) permet de tester une modification avant de la valider définitivement.
  • Transformer un DELETE en SELECT avec la même clause WHERE avant exécution révèle exactement quelles lignes seraient affectées.

Mini-exercice

Avant d'exécuter DELETE FROM clients WHERE date_inscription < '2020-01-01'; en production, quelle vérification simple faire pour éviter une mauvaise surprise ?

Réponse : exécuter d'abord SELECT * FROM clients WHERE date_inscription < '2020-01-01'; avec la même clause WHERE, pour visualiser précisément quelles lignes seraient supprimées avant de valider réellement le DELETE, idéalement dans une transaction pour pouvoir annuler si le résultat surprend.

Quiz de validation

Quiz - 2 questions

1. Que se passe-t-il avec un UPDATE sans clause WHERE ?

2. À quoi sert une transaction (BEGIN / COMMIT / ROLLBACK) ?

Suis ta progression

Crée un compte gratuit pour suivre ta progression et accéder à toutes les leçons.