IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Supprimer des enregistrements non référencés par une clé étrangère avec DELETE IGNORE [MySQL-5.5]


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 253
    Points : 84
    Points
    84
    Par défaut Supprimer des enregistrements non référencés par une clé étrangère avec DELETE IGNORE
    Bonjour,

    Je suis entrain de me frotter à l'option IGNORE dans une requête DELETE dans l'espoir de ne supprimer que des lignes d'une table donnée non référencées par une quelconque clé étrangère dans ma base.
    Le but est de nettoyer la table en supprimant ce qui ne sert plus puisque non référencé.

    De ce que je comprends de la doc MySQL à son propos, la clause indique au SGBD qu'il faut ignorer les erreurs et n'afficher que des alertes.

    Je pousse donc la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DELETE IGNORE FROM ma_table WHERE 1>0
    Je reçois bien une alerte puisque j'ai des lignes qui sont encore référencées ailleurs mais celles qui ne le sont plus (normalement rien n'empêche leur suppression) sont toujours présentes.
    Il faut donc déduire que la requête est purement et simplement stoppée dès lors qu'une contrainte d'intégrité apparait.

    Est-il possible de réaliser ce que je souhaite sans avoir recours à une requête imbriquée qui donne la liste des enregistrements à ne pas tenter de supprimer ?
    Cette table est référencée par plusieurs autres tables et il serait franchement fastidieux de vérifier partout avant de lancer le DELETE.

    Merci par avance pour vos retours.

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 253
    Points : 84
    Points
    84
    Par défaut
    J'apporte donc moi-même la solution : ça ne peut pas être réalisé directement.

    Il est par contre possible de se servir de l'information_schema pour déterminer quelles sont les clés étrangères qui peuvent poser problème dans un DELETE.
    Une fois qu'on en a la liste, on peut faire la suppression en utilisant une requête imbriquée (ou une jointure) et ainsi ne toucher que les lignes non référencées comme demandé initialement.

    Je poste la requête dans la soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/12/2012, 20h46
  2. affichage des enregistrements qui commencent par une lettre donnée
    Par kroma23 dans le forum Bases de données
    Réponses: 4
    Dernier message: 14/10/2011, 09h08
  3. supprimer des enregistrements d'une table via recordset
    Par isabelle b dans le forum VBA Access
    Réponses: 14
    Dernier message: 22/06/2008, 14h20
  4. Réponses: 4
    Dernier message: 22/03/2007, 18h28
  5. Réponses: 3
    Dernier message: 01/12/2006, 20h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo