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

SQL Procédural MySQL Discussion :

réinitialiser clé primaire


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Par défaut réinitialiser clé primaire
    bonjour,
    le champ "num" est la clé primaire de ma table,
    comme les enregistrements proviennent d'une autre table ces "num" ne se suivent pas et prennent des valeurs quelconques, existe-t-il une commande permettant de leur redonner des valeurs consecutives, et a partir d'une valeur déterminée?

  2. #2
    Koo
    Koo est déconnecté
    Membre éclairé Avatar de Koo
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 76
    Par défaut
    j'ai pas tout compris. Et puis ta clé primaire, elle est auto-incrémenté ou pas ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Par défaut
    j'ai pas tout compris
    en gros la table concernée recupère certains enregistrements (avec un critère de sélection, mais peu importe) d'une autre table.
    le champ "num" qui est autoincrementé, conserve lui aussi la valeur qu'il avait dans cette première base , au lieu de partir d'une valeur que je veux ( par exemple, 1 ) en s'autoincrémentant.
    De plus grâce à une fonction de phpmyadmin je trie la table par ordre alphabétique, j'aimerais donc que les numeros corespondent a cet ordre.
    Je pensais donc, apres avoir classé les enregistrements comme je voulais, réinitialiser les clés primaires afin d'avoir des numéros consécutifs commencant a 1.
    voila, merci encore

  4. #4
    Koo
    Koo est déconnecté
    Membre éclairé Avatar de Koo
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 76
    Par défaut
    en fait sque tu veut, c'est si tu a par exemple, les clé primaire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1 | toto
    3 | tata
    6 | foo
    ...
    faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1 | toto
    2 | tata
    3 | foo
    ...

    si c'est paca, montre la structure de ta table, parskeu c vraiment pas clair.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Par défaut
    tu as parfaitement compris c'est exactement ca
    sachant que les clés de la table non-modifiée ne sont meme pas forcement dans un ordre croissant

  6. #6
    Koo
    Koo est déconnecté
    Membre éclairé Avatar de Koo
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 76
    Par défaut
    il n'y a pas de fonction MySql qui permette de faire ca.

    j'avais une fois ce que tu recherche à l'aide d'un script PHP qui modifie chaque clé primaires. Y suffi de faire une boucle qui parcour les enregistrements, et une variable incrémenté à chaque passage, pour la nouvelle valeur de la clé.

    sinon sur la doc mysql ya une autre méthode qui est proposée (pas testé)

    Citation Envoyé par Guy Martin
    For those that are looking to "reset" the auto_increment, say on a list that has had a few deletions and you want to renumber everything, you can do the following.

    DROP the field you are auto_incrementing.
    ALTER the table to ADD the field again with the same attributes.

    You will notice that all existing rows are renumbered and the next auto_increment number will be equal to the row count plus 1.

    (Keep in mind that DROPping that column will remove all existing data, so if you have exterior resources that rely on that data, or the numbers that are already there, you may break the link. Also, as with any major structure change, it's a good idea to backup your table BEFORE you make the change.)
    http://dev.mysql.com/doc/mysql/fr/example-AUTO_INCREMENT.html

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Par défaut
    pour ces conseils koO, l'idée de la boucle me semble interessante, j'ai un peu du mal a la programmer pour l'instant mais dès que j'ai un script qui marche je le poste au cas ou ca interesse quelqu'un

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Par défaut
    voici le code php que je propose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <?php
     
    mysql_connect("localhost","...","..."); 
    $requete="SELECT * FROM table";
    $resultat=mysql_db_query(base1,$requete) or die ('Erreur '.$requete.' '.mysql_error()); 
    //juste pour se placer dans la bonne table
     
    $nblignes=mysql_num_rows($resultat);
    //nbre d'enregistrements
     
    for($j=1; $j <= $nblignes; $j++) {
    $ligne = mysql_fetch_row($resultat);
    // chaque enregistrement
     
    $requete="UPDATE table SET num=$j WHERE num=$ligne[0]";
    // $ligne[0] correspond a l'ancienne valeur de num
    // $j est la nouvelle valeur
     
    $result=mysql_db_query(base1,$requete) or die ('Erreur '.$requete.' '.mysql_error()); 
     
    }
    mysql_close();
     
    ?>
    Pour choisir la valeur de départ(par exemple, 300), on doit pouvoir remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for($j=1; $j <= $nblignes; $j++) {
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for($j=301; $j <= $nblignes+300; $j++) {

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

Discussions similaires

  1. [AC-2013] Réinitialiser la valeur de la clé primaire.
    Par lljoll dans le forum Access
    Réponses: 4
    Dernier message: 10/02/2024, 09h18
  2. clé primaire aléatoire
    Par peuh dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 23/06/2003, 20h51
  3. Procédure stocké:Insert et renvoie de la clé primair
    Par caramel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2003, 09h34
  4. Problème pour récupérer la clé primaire
    Par caramel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/04/2003, 13h57
  5. Réinitialisation
    Par kacedda dans le forum C
    Réponses: 3
    Dernier message: 13/12/2002, 04h56

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