0Pricing
SQL Academy · Leçon

DELETE avec USING et modèles sûrs

Supprimez les lignes jointes à d’autres tables avec DELETE ... USING et utilisez des transactions ainsi que SELECT au préalable pour vérifier avant toute opération destructive.

DELETE avec USING et modèles sûrs est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

DELETE de base

Supprimez les lignes correspondantes :

DELETE FROM users WHERE id = 1;

Testez toujours d’abord avec SELECT

Avant tout DELETE, exécutez le même WHERE avec SELECT afin de confirmer le nombre de lignes :

SELECT COUNT(*) FROM orders
WHERE status = 'cancelled' AND created_at < NOW() - INTERVAL '1 year';

DELETE dans une transaction

Encadrez les opérations destructrices dans une transaction afin de pouvoir utiliser ROLLBACK :

BEGIN;
DELETE FROM orders WHERE status = 'cancelled' AND ...;
SELECT COUNT(*) FROM orders;       -- sanity check
-- COMMIT;  or ROLLBACK;

DELETE sans WHERE est catastrophique

DELETE FROM users; vide la table. Il n’existe pas de bouton Annuler. Soyez très prudent : consacrer une seconde de plus à saisir un WHERE est une précaution peu coûteuse.

DELETE … USING (suppression avec JOIN dans PostgreSQL)

Supprimez des lignes d’une table en fonction d’une autre table :

DELETE FROM orders o
USING users u
WHERE u.id = o.user_id
  AND u.is_banned = true;

DELETE avec une sous-requête

Alternative conforme à la norme :

DELETE FROM orders
WHERE user_id IN (SELECT id FROM users WHERE is_banned);

Cascades de clés étrangères

Si orders.user_id possède ON DELETE CASCADE, la suppression d’un utilisateur supprime automatiquement ses commandes. C’est pratique, mais dangereux — utilisez cette fonction avec modération.

ALTER TABLE orders
  ADD CONSTRAINT orders_user_fk
  FOREIGN KEY (user_id) REFERENCES users(id)
  ON DELETE CASCADE;

Suppressions logiques

De nombreuses applications ne suppriment pas réellement les lignes : elles définissent un horodatage deleted_at :

UPDATE users SET deleted_at = NOW() WHERE id = $1;

-- Every query then has:
WHERE deleted_at IS NULL

Nettoyage des anciennes données

Pour nettoyer périodiquement de grandes tables, supprimez les lignes par lots afin d’éviter les transactions de longue durée :

DELETE FROM events
WHERE id IN (
  SELECT id FROM events
  WHERE created_at < NOW() - INTERVAL '90 days'
  LIMIT 10000
);
-- run this in a loop until it returns 0 rows

TRUNCATE : quand la rapidité compte

Si vous voulez réellement vider une table, TRUNCATE est plus rapide que DELETE, car il ne parcourt pas les lignes. En revanche, il ne déclenche pas les déclencheurs ROW et ne peut pas être annulé dans toutes les configurations :

TRUNCATE TABLE staging_orders;
TRUNCATE TABLE staging_orders RESTART IDENTITY CASCADE;

RETURNING avec DELETE

Récupérez les lignes supprimées — c’est utile pour l’archivage :

WITH deleted AS (
  DELETE FROM orders WHERE status = 'archived' RETURNING *
)
INSERT INTO orders_archive SELECT * FROM deleted;

Récapitulatif

DELETE est l’instruction la plus dangereuse. Mesures de précaution :

  • Exécutez d’abord un SELECT
  • Utilisez BEGIN; ... ; ROLLBACK pour faire une simulation
  • Effectuez les suppressions volumineuses par lots
  • Préférez les suppressions logiques pour les données visibles par les utilisateurs
  • Utilisez TRUNCATE uniquement sur les tables de préproduction

Vérification rapide

Vous avez exécuté DELETE FROM users; sans WHERE. Que faites-vous ?

Questions Fréquemment Posées

La leçon « DELETE avec USING et modèles sûrs » est-elle gratuite ?

Oui — le texte complet de « DELETE avec USING et modèles sûrs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « DELETE avec USING et modèles sûrs » ?

Supprimez les lignes jointes à d’autres tables avec DELETE ... USING et utilisez des transactions ainsi que SELECT au préalable pour vérifier avant toute opération destructive. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « DELETE avec USING et modèles sûrs » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. INSERT avec plusieurs lignes
  2. UPSERT : ON CONFLICT DO UPDATE (PostgreSQL)
  3. UPDATE avec FROM et mises à jour de type JOIN
  4. DELETE avec USING et modèles sûrs
← Retour à SQL Academy