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 :

Renuméroter les IDs d'une partie de table


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Par défaut Renuméroter les IDs d'une partie de table
    Bonjour !

    Suite à l'élimination des doublons d'une table, la colonne ID (AUTO-INCREMENT) présente de nombreuses entrées vides au-dessus de l'index, par exemple, 49930.
    Comment réattribuer les numéros des entrées non-vides à partir de 49930 de façon à ne plus avoir d'entrées vides ?

    Merci d'avance pour votre aide !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    On ne réutilise JAMAIS les identifiants auto-incrémentés supprimés !
    On ne les modifie JAMAIS !

    Un identifiant est une clé technique pour le SGBD qui n'a aucune signification. Par contre, comme cet identifiant est potentiellement utilisé comme clé étrangère dans d'autres tables, changer l'identifiant demande de modifier les clés étrangères et là ça peut foutre la pagaille dans les données si le mécanisme de cascade n'est pas programmé partout et qu'on s'aventure à le faire à la main.

    Bref, NE LE FAIS PAS !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Par défaut
    Merci pour ta réponse !

    Je sais, mais toutes mes tables sont MyISAM et je n'utilise aucune clé étrangère...

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Et bien justement, c'est encore pire parce que tu ne peux pas avoir de mécanisme automatique qui mette à jour les tables référencées.

    Ou alors c'est encore pire que ce que je pense et tu n'utilises pas tes identifiants comme référence dans les tables associées ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Par défaut
    Ouh la la, faut que je change ma couche !!!

    D'abord, je me méfie des automatismes comme de la peste.
    Je ne crois qu'aux actions que je déclenche en pleine connaissance de cause.

    Je vais te donner un exemple.
    J'ai une table principale qui répertorie toutes les personnes que mon annuaire se doit de mentionner.
    Dans cette table, chaque personne mentionnée est munie de tous les renseignements nécessaires la concernant.

    J'ai, d'autre part, une table secondaire pour les utilisateurs enregistrés.

    Si j'avais un automatisme liant les deux, ce serait le foutoir pour plusieurs raisons :
    1 - Un enregistré non répertorié verrait son dossier créé automatiquement dans la table principale sans aucun contrôle sur l'authenticité des données introduites lors de l'enregistrement. L'admin se doit de vérifier ces données personnelles avant d'admettre un nouvel utilisateur.
    2 - Quid des homonymes existant parfois au sein d'une même école et d'une même année de promotion ?!!! Aucun automatisme ne pourrait décider du choix.
    3 - Les identifiants de ces deux tables sont toujours différents.

    Ces raisons majeures (il y en a d'autres) font que jamais je n'utilise l'identifiant dans mes scripts de lecture et d'écriture.

    Je ne cours donc, à mon humble avis aucun danger à modifier la colonne ID de ma table principale.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    A mon avis tu utilises surtout un SGBD complètement de travers !

    Les identifiants auto-incrémentés sont justement là pour différencier les jumeaux parfaits.

    Si j'ai bien compris ce que tu as écrit, tu as des personnes dont certaines sont aussi des utilisateurs ?

    Règle de gestion :
    Un utilisateur est une personne et une personne peut être un utilisateur.

    Cette règle est typiquement celle d'un héritage de données.

    MCD :
    utilisateur -(1,1)----être----0,1- personne

    Tables :
    te_personne_prs (prs_id, prs_nom, prs_prenom, prs_date_naissance, [colonnes communes à toutes les personnes])
    th_utilisateur_uti (uti_id_personne, uti_login, uti_mot_passe, [colonnes spécifiques aux utilisateurs])

    prs_id est un identifiant auto-incrémenté, clé primaire de la table te_personne_prs.
    uti_id_personne est à la fois une clé étrangère référençant l'identifiant de la personne qui est aussi un utilisateur et la clé primaire de la table th_utilisateur_uti. Avec des tables en InnoDB et une contrainte de clé étrangère ON DELETE CASCADE sur la colonne uti_id_personne, quand tu supprimes la personne de la table te_personne_prs, cela supprime automatiquement l'utilisateur correspondant dans la table th_utilisateur_uti. Bien sûr, l'inverse n'est pas vrai ; supprimer l'utilisateur ne supprime pas automatiquement la personne.

    Bref, il ne faut pas zapper l'étape "modélisation" !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Lister les ids d'une page HTML
    Par djibril dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 19/03/2010, 12h27
  2. Extraire une partie de table sur critère (range) numérique
    Par lbar012001 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/12/2008, 17h36
  3. Eliminer les rédondences dans une jointure de tables
    Par odi_9 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 19/09/2006, 16h19
  4. Limiter les droits à une partie des lignes d'une table
    Par Nabu dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 20/08/2006, 00h04
  5. masquer une partie de table
    Par Bruno2000 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/08/2006, 00h02

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