PaliSkill
SQL avancé

Leçon 2 / 9 — Chapitre 7: CTE récursive et structures avancées

Condition d'arrêt : éviter une boucle infinie

Une CTE récursive s'arrête naturellement quand son terme récursif ne trouve plus aucune ligne correspondante — c'est-à-dire quand plus aucune catégorie n'a pour parent une ligne ajoutée au tour précédent.

Sur categories, la récursion de la leçon précédente s'arrête après 2 tours : le premier ajoute les enfants directs des racines (2, 4, 6), le second ajoute l'enfant de ces enfants (3, seul descendant de 2) ; au troisième tour, aucune catégorie n'a pour parent 3, 4 ou 6 — la récursion s'arrête d'elle-même.

Le vrai danger : un cycle dans les données. Si une catégorie avait pour parent_id l'un de ses propres descendants (par erreur, ou par corruption des données), le terme récursif retrouverait indéfiniment de « nouvelles » lignes déjà vues — une boucle infinie, qui ne s'arrêterait jamais d'elle-même.

À retenir :

  • Une CTE récursive s'arrête d'elle-même dès que son terme récursif ne trouve plus aucune ligne correspondante.
  • Un cycle dans les données (une catégorie descendante d'elle-même) provoque une boucle infinie, sans arrêt naturel possible.
  • Une protection courante consiste à limiter le nombre de tours (WHERE niveau < 20, par exemple) ou à suivre les identifiants déjà visités pour détecter un cycle.

À vous de jouer : si categories contenait une ligne dont le parent_id pointerait vers l'un de ses propres enfants, la requête de la leçon précédente s'arrêterait-elle naturellement ?

🔒

Continuez ce module

Débloquez les leçons restantes ainsi que la certification finale.

2 500 XOF / 3,81 € / 4,15 $

Débloquez les 80 leçons restantes de ce module

Votre paiement est vérifié avant l'activation de l'accès