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

PHP & Base de données Discussion :

Changer id d'une table et modifier autres tables qui possèdent cette id


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 118
    Par défaut Changer id d'une table et modifier autres tables qui possèdent cette id
    Bonjour à tous !
    Un fois encore j'ai besoin d'aide car je pédale dans la semoule !

    Comment changer "id" d'un table et modifier les autres tables qui possède cette "id" avec le nouveau ?

    Explication:

    J'ai une table utilisateur 'user' qui possède plusieurs champs dont 'id' (en auto-incrémentation). Je viens de m’apercevoir que mes id sont passés de 450 à 4460 (par une erreur de manip de l'auto-incrément, pas JOLI !!!).
    Comment faire aujourd'hui pour modifier cette id (pour repartir à partir de 451..452...453...etc (sachant qu'il n'existe pas encore!) en modifiant toutes les autres tables qui possède cet id (id importé et non incrémenté, faisant référence au id de la table user) de 4460, 4459, 4458 etc... (soit environ 120 entrées !!!)

    Y-aurait pas une commande magique pour modifier chaque table par la modification de chaque nouveau id ?

    Un super grand merci d'avance.

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    assures toi bien que les liens vers ce champ id ont pour propriété : ON UPDATE CASCADE.
    Exécutes ceci :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET @count = 0;
    UPDATE t_table SET t_table.id = @count:= @count + 1;

    Et je te conseillerai fortement de ne pas te préoccuper de la séquence des id auto-incrémentés. Laisses donc le moteur faire sa salade dans son coin du moment que tu récupères correctement tes données cela est bien suffisant. La notion de JOLI n'existe pas en base de données. Une interface je veux bien mais pour le reste en développement c'est assez inutile comme concept.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 118
    Par défaut
    devant ce conseil grandement éclairé... je crois que je vais peut-être rien toucher...
    Je vais néanmoins testé cette notion de cascade histoire d'apprendre.

    Super Merci...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 118
    Par défaut
    Concernant le "on update -> cascade", il faut que le moteur de sauvegarde de mes tables soient tous au format InnoDB et non MylSAM ? Si c'est le cas dois-je les mettre toutes en InnoDB ?
    (J'avoue ne pas savoir la différence excepté peut-être ce côté relationnelle entre table, non ?)

    Le fait de mettre "update on cascade" veux-t-il dire que toutes les tables possédant l'id de la table user "44560" par exemple seront également modifiées ?

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par krislec Voir le message
    Concernant le "on update -> cascade", il faut que le moteur de sauvegarde de mes tables soient tous au format InnoDB et non MylSAM ? Si c'est le cas dois-je les mettre toutes en InnoDB ?
    (J'avoue ne pas savoir la différence excepté peut-être ce côté relationnelle entre table, non ?)

    Le fait de mettre "update on cascade" veux-t-il dire que toutes les tables possédant l'id de la table user "44560" par exemple seront également modifiées ?
    Sans rentrer dans les détails, tu as cité le principal avantage du moteur InnoDB à savoir une gestion claire et optimisée des relations entre les tables.
    Avant de modifier le format de tes tables, je t'invite à faire une sauvegarde intégrale de toutes tes données. Ensuite, tu peux changer le format de chacune des tables soit manuellement si t'en as pas 200, soit par script. En fonction de la taille de chaque table, le traitement peut prendre un certain temps.
    Le ON UPDATE CASCADE va entrainer automatiquement la mise à jour des id dans toutes les tables liées référençant cet id. Concrètement, si tu as un dans une table t_user un id=44560 et que cet id se trouve modifié en 8560 => partout où l'ancien id est utilisé dans les autres tables, il sera modifié en 8560 afin de préserver les intégrités référentielles.
    Enfin, les optimisations qu'a apporté Oracle au moteur InnoDB sont telles qu'il serait dommage de ne profiter de ses petits plus par rapport au vieux MyISAM.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 118
    Par défaut
    Fabulous !
    Maintenant est-ce à moi de créer ces liens entre les tables ? car d'une table à l'autre le id n'a pas le même nom.
    Ou est-ce la "valeur" du id qui fait procéder à l'update ?
    Je sens que je vais me lancer...

Discussions similaires

  1. Réponses: 8
    Dernier message: 03/11/2008, 08h07
  2. Rechercher une valeur dans un autre table
    Par zangel dans le forum Access
    Réponses: 4
    Dernier message: 10/09/2008, 01h48
  3. extraire des dates d'une table sans modifier la table
    Par t8024328 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/09/2007, 11h32
  4. Réponses: 4
    Dernier message: 25/08/2006, 00h25
  5. SELECT sur l'une ou sur l'autre table
    Par griese dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/07/2006, 14h36

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