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 :

Foreign Key : Ajout avec test si existe


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2016
    Messages : 109
    Par défaut Foreign Key : Ajout avec test si existe
    Bonjour,

    Pour ajouter une Foreign Key, c'est simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE `actus`
      ADD CONSTRAINT `fk_actus_tableid` FOREIGN KEY (`Table_Id`) REFERENCES `tables` (`Id`);
    Pour lister les Foreign Key, c'est simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE = 'FOREIGN KEY'
    Use FOREIGN_KEY_CHECKS
    Mais est-il possible de faire un ADD CONSTRAINT IF NOT EXIST ?

  2. #2
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 915
    Par défaut
    Salut Berthos.

    Oui, en faisant une procédure stockée.

    Dans un premier temps, vous faites un cursor afin de récupérer les informations dont vous avez besoin.
    Pourquoi un cursor ? Je suppose que vous n'avez pas une seule table à traiter de cette façon.

    Comment faire le cursor ?
    En partant du catalogue ("INFORMATION_SCHEMA") de mysql, et en faisant une jointure sur toutes les tables du catalogue pour récupérer le maximum d'information.
    Sauf que si vous testez uniquement CONSTRAINT_TYPE = 'FOREIGN KEY', vous aurez que celles qui existent déjà.
    Pour celles qui n'existent pas, dont vous devez créer une clef étrangère, je ne vois pas trop comment faire. Pourquoi ?
    Une clef étrangère peut se faire sur plusieurs colonnes, mais la relation entre la FK et la PK peut se faire aussi sur des noms différents.
    Je pense que le plus simple est de créer une table où vous renseignerez tout ce dont vous avez besoin pour créer vos clefs étrangères
    Genre :
    --> la table à tester,
    --> le nom de la contrainte,
    --> la liste des colonnes FK pour constituer votre clef étrangère
    --> le nom de la table mère (référence)
    --> la liste, dans le même ordre, des colonnes de la table mère,
    --> les actions à appliquer lors d'une mise à jour ou d'une suppression.

    En gros, vous faites une jointure entre cette table et le catalogue de mysql.
    Vous faites en sorte de sortir les lignes quand la contrainte n'existe pas.

    Ensuite, pour chaque ligne de votre cursor, vous devez créer la commande qui va recréer votre clef étrangère.
    Pour cela, vous devez faire une requête préparée.
    --> https://dev.mysql.com/doc/refman/8.0...tatements.html

    Si je devais faire ce genre de traitement, je m'y prendrais ainsi.

    @+

Discussions similaires

  1. Suppression de caractères avec test d'existence
    Par falco- dans le forum Langage
    Réponses: 12
    Dernier message: 18/01/2019, 11h08
  2. [Mapping] Erreur d'ajout d'une ligne avec un Foreign key(Struts2, Hibernate)
    Par lahbabi dans le forum Hibernate
    Réponses: 0
    Dernier message: 11/08/2013, 06h45
  3. requête d'ajout avec test
    Par pasb71 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/05/2011, 14h38
  4. Réponses: 4
    Dernier message: 22/07/2009, 15h55
  5. Création vue avec test d'existence
    Par yan77 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/12/2004, 11h44

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