Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Homme Profil pro Stephane
    UTC
    Inscrit en
    décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Nom : Homme Stephane
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : UTC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2012
    Messages : 7
    Points : 0
    Points
    0

    Par défaut Problème de violation

    Bonjour à tous,

    Ceci est mon premier message je m'excuse donc d'avance si j'oublie une formalité quelconque.
    Mon problème est le suivant :

    je possède deux tables créées de cette façon :

    Code :
    1
    2
    3
    4
    5
    6
    7
    	CREATE TABLE utilisateur
    (
      id serial NOT NULL,
      login character varying(10) NOT NULL,
      mdp character varying(10) NOT NULL,
      CONSTRAINT utilisateur_pkey PRIMARY KEY (id)
    )
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE liste
    (
      id serial NOT NULL,
      idutilisateur integer,
      nom character varying(30) NOT NULL,
      element integer,
      elementcoche integer,
      modele BOOLEAN,
      CONSTRAINT liste_pkey PRIMARY KEY (id),
      CONSTRAINT liste_idutilisateur_fkey FOREIGN KEY (idutilisateur)
          REFERENCES utilisateur (id) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION
    )
    Tout cela fonctionne, je peux ensuite ajouter des données dans les deux tables. Seulement, si l'utilisateur avec l'id numéro 1 possède une liste et que je modifie l'id de l'utilisateur numéro 1, j'ai le droit à :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ERREUR:  UPDATE ou DELETE sur la TABLE « utilisateur » viole la contrainte de clé étrangère
    « liste_idutilisateur_fkey » de la TABLE « liste »
    DETAIL:  La clé (id)=(1) est toujours référencée à partir de la TABLE « liste ».
     
     
    ********** Erreur **********
     
    ERREUR: UPDATE ou DELETE sur la TABLE « utilisateur » viole la contrainte de clé étrangère
    « liste_idutilisateur_fkey » de la TABLE « liste »
    État SQL :23503
    Détail :La clé (id)=(1) est toujours référencée à partir de la TABLE « liste ».
    J'ai essayer de créer un trigger pour effectuer une modification automatique :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE FUNCTION change_idUser() RETURNS TRIGGER AS $$
    BEGIN
    	UPDATE liste SET liste.idUtilisateur = new.id;
    	RETURN NEW;
    END;
    $$ LANGUAGE plpgsql;
     
    CREATE TRIGGER idUserChange AFTER UPDATE ON utilisateur
    FOR EACH ROW EXECUTE PROCEDURE change_idUser();
    mais cela ne fonctionne pas.

    Je comprends tout à fait le problème , étant une clef étrangère je ne peux pas modifier la valeur de l'id de l'utilisateur , .. mais moi je voudrais que ce soit faisable, avez-vous une solution pour moi ?

    Merci d'avance

  2. #2
    Expert Confirmé
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 831
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 831
    Points : 2 762
    Points
    2 762

    Par défaut

    Essaye ON UPDATE CASCADE au lieu de ON UPDATE NO ACTION, NO ACTION étant justement le contraire de ce que tu voudrais.
    Pareil pour DELETE

  3. #3
    Invité de passage
    Homme Profil pro Stephane
    UTC
    Inscrit en
    décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Nom : Homme Stephane
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : UTC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2012
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Possibilité de faire ça avec un ALTER TABLE ?

    Je l'ai modifié depuis pgadmin et cela fonctionne.
    Merci beaucoup pour votre aide rapide.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •