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

Langage SQL Discussion :

modification valeur d'une clé primaire


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 18
    Points
    18
    Par défaut modification valeur d'une clé primaire
    Bonjour,
    J'ai une table Appareil avec pour clé primaire le champ Num_inventaire_appareil.

    Je veux pouvoir changer la valeur de cette clé primaire.

    Pour cela j'éxécute la requête suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    insert into appareil (num_inventaire_appareil , Nom_type_appareil, Nom_marque,Date_affectation_appareil, Num_serie_appareil, Nom_statut_appareil, Date_creation_appareil, Fin_garantie_appareil, Fin_amortissement_appareil, Nom_situation_appareil
    ,Nom_famille,Commentaire_appareil, MAJ_appareil , Util_appareil, Compteur_appareil, Compteur_cumule_appareil, Selection_appareil, Mis_en_rebut, Inventaire_valider) 
     SELECT @num_inventaire_appareil, Nom_type_appareil, 
    Nom_marque,Date_affectation_appareil, Num_serie_appareil, Nom_statut_appareil, Date_creation_appareil, Fin_garantie_appareil, Fin_amortissement_appareil, Nom_situation_appareil
    ,Nom_famille,Commentaire_appareil, MAJ_appareil , Util_appareil, Compteur_appareil, Compteur_cumule_appareil, Selection_appareil, Mis_en_rebut, Inventaire_valider 
     FROM APPAREIL 
    WHERE Num_inventaire_appareil = @num_inventaire_appareil_old
    J'ai donc un nouvel enregistrement identique à l'ancien avec la nouvelle valeur de la clé.


    Mais lorsque je veux recopier les lignes des tables qui ont pour clé étrangère la clé primaire de la table Appareil, jéxécute la requête suivante :
    Par exemple pour les lignes de la table MOUVEMENT


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    INSERT INTO MOUVEMENT( Date_mouvement, Num_inventaire_appareil, Nom_situation_appareil, Code_objet_mouvement, Compteur_mouvement, Numero_patient, Date_prescription, Nom_centre_rattachement, Detail, MAJ_mouvement,
     Util_mouvement,Code_association)
    SELECT  Date_mouvement, @num_inventaire_appareil, Nom_situation_appareil, Code_objet_mouvement, Compteur_mouvement, Numero_patient, Date_prescription, Nom_centre_rattachement, Detail, MAJ_mouvement,
     Util_mouvement, Code_association
    FROM MOUVEMENT
    WHERE  Num_inventaire_appareil = @num_inventaire_appareil_old
    Seulement cette dernière requête "plante" et ne copie pas la totalité des lignes.


    Si vous avez une idée du problème, je vous en remercie d'avance.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Plusieurs choses à revoir dans vos pratiques !

    1) Pour modifier une valeur dans une table, on n'insère pas une nouvelle ligne !
    Utiliser plutôt une requête UPDATE !

    2) C'est dangereux de modifier une clé primaire !
    Si la clé primaire est utilisée comme clé étrangère dans d'autres tables, il faut aussi modifier cette valeur dans les autres tables sinon vous perdez la cohérence des données.
    Il existe certes la clause ON UPDATE CASCADE avec les contraintes de clés étrangères mais d'une manière générale, une bonne clé primaire est invariable.

    3) Éviter les références, codes et autres colonnes dotées de sens pour les clés primaires !
    Du fait justement que ces valeurs peuvent changer, il faut éviter de les utiliser comme clés primaires. Il vaut mieux utiliser une colonne de type entier auto-incrémenté que seul le SGBD connait.

    Pour plus d'info sur ce qu'est une bonne clé, voir l'article de SQLPro.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    merci
    J'ai trouvé la solution.
    Et au passage je sais ce qu'est une clé...
    Il suffit simplement de faire un update sur les lignes qui ont pour clé étrangère ma clé primaire, je me suis simplement compliqué la tâche.

    Et il arrive parfois qu'il faille changer la valeur d'une clé primaire. Ce qui est fait correctement dans mon premier extrait de code

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par tmerigon Voir le message
    Et il arrive parfois qu'il faille changer la valeur d'une clé primaire.
    Parce que vous avez mal déterminé la clé primaire !
    On ne devrait JAMAIS avoir à changer une clé primaire !
    Cf l'article que j'ai mentionné dans mon précédent message.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/01/2014, 09h30
  2. Modification valeurs dans une matrice
    Par ArnaudFu13 dans le forum MATLAB
    Réponses: 2
    Dernier message: 04/03/2013, 17h01
  3. [MySQL] Modification valeur d'une table
    Par Depsou dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 03/07/2012, 16h40
  4. Retrouver la valeur d'une clé primaire autoinc
    Par peterbrady dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 07/01/2007, 18h21
  5. [VB6]Modification de valeurs dans une MSflexgrid
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 14/02/2006, 08h48

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