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 :

Auto incrément inversé


Sujet :

SQL Procédural MySQL

  1. #1
    Membre actif Avatar de Momodedf
    Inscrit en
    Juillet 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 246
    Points : 221
    Points
    221
    Par défaut Auto incrément inversé
    Bonjour,

    Un nom de topic étrange pour un besoin qui ne l'est pas moins ^^
    (dur dur de trouver des bon mot clef sur google ....)

    Alors voilà, j'aimerais (à la création de ma table) créer un champ auto incrémenté (bon jusque là c'est tout con).
    Le probleme c'est que je voudrais que chaque nouvel enregistrement prenne l'id 1 et donc que les autres id soient tous incrémenté.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 181
    Points : 189
    Points
    189
    Par défaut
    tu as essayé de faire un update de tous les enregistrements en mettant id = id+1 et ensuite d'insérer l'id 1
    pour ça il faudrait pas d'auto incrément
    ...

  3. #3
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    La technique proposée fonctionnera avec un trigger !

    Par curiosité, pourquoi utiliser un auto-increment inversé ?
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 181
    Points : 189
    Points
    189
    Par défaut
    Citation Envoyé par nounetmasque Voir le message
    La technique proposée fonctionnera avec un trigger !

    Par curiosité, pourquoi utiliser un auto-increment inversé ?
    d'accord avec toi pour l'auto incrément inversé, par contre je ne le ferais pas forcément avec un trigger (un peu de code avant l'insert remplace amplement le trigger que je n'ai jamais utilisé faut que j'apprenne)
    ...

  5. #5
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Citation Envoyé par sebdu Voir le message
    un peu de code avant l'insert remplace amplement le trigger
    Il me semble qu'un trigger sur un évenement before insert évitera une bidouille puisque le but est de mettre à jour des champs en fonction du paramétrage de ton trigger. Dans cet exemple, avant chaque insertion dans la table, il faudra incrémenter toutes les colonnes.
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

  6. #6
    Membre actif Avatar de Momodedf
    Inscrit en
    Juillet 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 246
    Points : 221
    Points
    221
    Par défaut
    tu as essayé de faire un update de tous les enregistrements en mettant id = id+1 et ensuite d'insérer l'id 1
    pour ça il faudrait pas d'auto incrément
    Bien sur mais c'est un peut lourd je me demande si ça va pas ramer un peut quand le nombre d'enregistrement sera important (100k enregistrement par exemple).

    En fait j'esperais qu'il y ait cette fonctionalité via phpmyadmin

    Par curiosité, pourquoi utiliser un auto-increment inversé ?
    Wahh la classe, auto-incrément inversé rentre déjà dans le jargon

    En fait je créé des statistiques assez souvent (plusieurs fois par jour) et j'aimerais les stoquer.
    Mais il me faut recuperer la derniere statistique enregistrée, ça aurait été facile comme ça, le dernier enregistrement aurait toujoours été celui à l'id 1.


    PS : chéquoi un trigger ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 181
    Points : 189
    Points
    189
    Par défaut
    Citation Envoyé par nounetmasque Voir le message
    Il me semble qu'un trigger sur un évenement before insert évitera une bidouille puisque le but est de mettre à jour des champs en fonction du paramétrage de ton trigger. Dans cet exemple, avant chaque insertion dans la table, il faudra incrémenter toutes les colonnes.
    d'accord avec toi sur le fait que ce soit une bidouille mais les anciennes versions de mysql n'ont pas les triggers et ça m'a sauvé de la misère plus d'une fois
    sinon je suis pour le trigger qui sera sans doute plus performant que la bidouille
    ...

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 181
    Points : 189
    Points
    189
    Par défaut
    Citation Envoyé par Momodedf Voir le message

    PS : chéquoi un trigger ?
    c'est ça
    ...

  9. #9
    Membre actif Avatar de Momodedf
    Inscrit en
    Juillet 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 246
    Points : 221
    Points
    221
    Par défaut
    Hum visiblement les trigger ne sont implémentés qu'à partir de MySQL 5.0.

    Vu que le server prod ne posser que la version 3.23 je pense que je vais opter pour la bidouille ...

    EDIT : merci pour le lien sebdu

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Citation Envoyé par Momodedf Voir le message
    En fait je créé des statistiques assez souvent (plusieurs fois par jour) et j'aimerais les stoquer.
    Mais il me faut recuperer la derniere statistique enregistrée, ça aurait été facile comme ça, le dernier enregistrement aurait toujoours été celui à l'id 1.
    Avec un auto-incrément inversé, à chaque fois que des données sont insérés dans la table, tous les enregistrements seront mis à jour (incrémentation de 1).
    Tu fais cela pour gagner du temps lors de l'accès aux données (tu ne récupère que le dernier enregistrement).
    Cependant, les insertions de données seront plus lentes (UPDATE avant INSERT).

    Je suppose que tu insères des données plus souvent que tu n'y accèdes.
    Dans ce cas, ne perds-tu pas plus de temps à l'insertion des données que tu n'en gagnes lors de l'accès aux données ?

  11. #11
    Membre actif Avatar de Momodedf
    Inscrit en
    Juillet 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 246
    Points : 221
    Points
    221
    Par défaut
    Non j'y accede plus souvent que je ne met à jour.

    Je lis environ 20 fois par jour et j'écris 3 à 4 fois par jour.

  12. #12
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Si tu veux récupérer le dernier enregistrement de ta base, je ne te conseille pas un auto-increment inversé et ceci pour les mêmes raisons que celles exposées par jeremya.
    Par contre une requette de ce style devrait convenir et ceci avec des tables de 100k enregistrements (pense à placer un index sur ton id ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * 
    FROM maTable t1, (SELECT max(id) FROM maTable ORDER BY id) t2
    WHERE t1.id = t2.id
    Je te laisse le soin d'adapter cette requette à ton besoin.
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

  13. #13
    Membre actif Avatar de Momodedf
    Inscrit en
    Juillet 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 246
    Points : 221
    Points
    221
    Par défaut
    Je savais même pas qu'on pouvait mettre une subquery dans la clause from .....
    J'avais pas pensé à la fonction MAX c'est vrai ....

    Je pense que je vais faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM my_table
    WHERE id =  (SELECT MAX(id)
                       FROM my_table);
    Merci bien

  14. #14
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Même si le sujet est considéré comme résolue, je tiens à préciser que l'exécution d'une requette est plus rapide si tu mets ton select dans ton from et non dans ton where.
    De plus ce type de sous-requette ne doit pas être gérée avec ta version de MySQL.
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

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

Discussions similaires

  1. Pb d'auto incrémentation sous interbase !!!
    Par le.clown dans le forum InterBase
    Réponses: 2
    Dernier message: 26/02/2004, 14h11
  2. prbl auto-incrémente
    Par cb dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/11/2003, 11h32
  3. Dernière clé auto incrémenté ?
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 15/11/2003, 10h41
  4. [CODE] auto incrémentation ?
    Par Roi dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 25/09/2003, 15h09
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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