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

PostgreSQL Discussion :

auto incrément


Sujet :

PostgreSQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Points : 125
    Points
    125
    Par défaut auto incrément
    Bonjour,

    Je voudrais savoir comment dire qu'une donnée de type serial est en auto increment. Par la même, je souhaiterais aussi savoir comment gérer cela dans une requête sql. Etant habitué des bases de données mysql je mettais juste double côtes pour signifier cela mais peut être qu'avec postgreSQL est-ce différent ?

    Enfin je vous remercie de bien vouloir m'aider.
    LikeZone
    Le meilleur du like

  2. #2
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 150
    Points
    150
    Par défaut
    Une donnée de type serial est un raccourci pour définir un int4 avec une incrémentation automatique (à l'aide d'une séquence).

    Bref, à partir du moment où tu dis qu'un champ est serial, il est forcément auto-incrémenté.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Points : 125
    Points
    125
    Par défaut
    Merci beaucoup pour ta réponse qui me ravit au plus haut point. Néanmoins comment faire la requête sql insert en sachant que l'on a un serial (qui comme tu l'as si bien dis s'auto gère) ?
    LikeZone
    Le meilleur du like

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Points : 125
    Points
    125
    Par défaut
    J'ai pas dans l'habitude d'insister sur une question mais celle-ci est vitale à l'avancer de mon activité et si je ne sais pas insérer des données avec un serial je ne peux continuer. En sachant que j'ai fini le côté client, ça serait bête de bloquer sur l'enregistrement ...

    J'ai finalement trouvé ... et je me demande vraiment comment j'ai fait pour ne pas trouver avant

    Bon pour les curieux :

    insert into ma_table (libelle) values ('mon libelle')

    sachant que ma table contient un id de type serial et un libelle de type varchar
    LikeZone
    Le meilleur du like

  5. #5
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 150
    Points
    150
    Par défaut
    Bah, j'avais fini ma journée, je suis parti du boulot... et je rentre à peine chez moi, là

    En fait, ton type serial, tu n'es pas obligé de le gérer dans les INSERT. Pour prendre un exemple simple : une table avec un champ serial et un champ texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE matable
    (
        id serial,
        libelle text
    )
    Pour l'insertion, le plus simple, c'est d'omettre le champ id et de laisser la base de données se débrouiller avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO matable (libelle) VALUES ('le libellé')
    Maintenant, si tu veux absolument gérer le serial dans ta requête INSERT, il faut faire appel à la séquence contenant l'auto-incrément. Le nom de la séquence respecte toujours le schéma suivant : nomtable_nomchamp_seq (dans mon exemple, matable_id_seq). Et pour s'en servir, il faut utiliser la méthode nextval() pour récupérer sa valeur. Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO matable (id, libelle) VALUES (nextval(matable_id_seq), 'le libellé')

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Points : 125
    Points
    125
    Par défaut
    Merci bien pour la fonction ... Mais sinon, pour récupérer l'id sans devoir faire une requête qui cherche cet id, comment fait on sachant que je suis dans un contexte php ?
    LikeZone
    Le meilleur du like

  7. #7
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 150
    Points
    150
    Par défaut
    Sans requête SQL, c'est impossible. Mais avec une simple SELECT, pour connaître la valeur courante de ta séquence, il faut appeler la méthode currval() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT currval('nom_sequence')
    Par contre, il faut savoir que cette fonction ne fonctionnera pas s'il n'y a eu aucun nextval dans la session de la base de données.

    Une dernière chose : je viens de m'apercevoir que j'ai fait une erreur dans mon post précédent. Le nom de la séquence, quand on appelle nextval() doit être mis entre quotes simples.

  8. #8
    Membre actif Avatar de tnodev
    Profil pro
    SSSSS
    Inscrit en
    Mai 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SSSSS

    Informations forums :
    Inscription : Mai 2005
    Messages : 182
    Points : 231
    Points
    231
    Par défaut
    Ce n'est pas mieux de faire cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT last_value FROM nom_sequence;

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