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

Langage SQL Discussion :

Récupérer l'identifiant lors d'un INSERT


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    Par défaut Récupérer l'identifiant lors d'un INSERT
    Bonjour à tous,

    Je voudrais pouvoir connaitre de manière sûre l'identifiant du dernier élément inséré.

    Pour le moment je fais un SELECT juste après la requête d'insertion, ce qui convient pour une base de données peu utilisée, mais qui risque de poser des problèmes avec une base de données avec de nombreux accès.

    Par exemple il se peut très bien que 2 utilisateurs créent un compte en même temps, dans ce cas comment être certain que le résultat du select portera sur le bon utilisateur ?

    Cordialement,
    mathias

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Salut,

    En fonction de l'application ( ou bien tu ne parles que de pur SQL ? ) et du SGBDR, tu as plusieurs possibilités.

    Sur MySQL par exemple, tu peux faire SELECT LAST_INSERT_ID(); pour l'obtenir, sous d'autres SGBDR, tu peux le faire via les sequences ( currval, nextval etC.. )

    Les séquences sont pour moi le moyen le plus sûr d'obtenir une valeur unique, car la manipulation des séquences est sécurisé multi utilisateur, et de plus, quand tu fais "currval" tu ne récupères que la valeur que tu as modifié avec TA connection, et donc tu obtiens toujours la valeur correspondante au script en cours.

    A+

  3. #3
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    Par défaut
    Ok, j'aurais besoin de quelques éclaircissements si possible.

    Pour un site Internet, j'utilise forcément le même utilisateur pour se connecter à la db, la connexion est ouverte au début de la génération de la page, pour que les séquences se réfèrent bien à la page courante est-il impératif de fermer la connexion proprement en fin de génération de la page ?

    Si je ferme mes connexions en fin de page (avec en php mysql_close() ou pg_close() ), chaque nouvelle connexion (donc sur chaque nouvelle page générée) est-elle belle et bien indentifié de manière à ce que l'accès à "currval" se référence à cette connexion ? Sans risque qu'un autre utilisateur (au sens du site) récupère par mégarde cet indentifiant.

    Pardonne moi d'être lourd comme ça, mais ce type de problème étant lié à une forte utilisation de la db, il m'est assez difficile de faire des essais tout seul...

    a+ et merci

    mathias

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Oui c'est exactement comme ça que ça se passe : la connection d'un script PHP fait référence à un currval unique; celui qu'elle aura modifié elle-même.

    Tu peux tester celà, en faisant une boucle, qui va t'afficher toutes les secondes le currval. Et parallèlement, en lançant une insertion avec un autre script php, qui lui mettra à jour la sequence. Normalement currval ne sera pas mis à jour dans ton premier script, car tu pour cette connection, tu n'auras pas utilisé nextval.

    A+

  5. #5
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    Par défaut
    Ok merci beaucoup pour ces précisions, bonne fin de journée :-)

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

Discussions similaires

  1. Comment récupérer l'identifiant d'une ligne en erreur lors d'un update
    Par backseatgreg dans le forum Développement
    Réponses: 1
    Dernier message: 20/07/2008, 12h32
  2. [MySQL] Récupérer la clé créée lors d'une insertion
    Par Prosis dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/11/2007, 21h55
  3. Récupérer la clé autoincrement lors d'un insert
    Par jejeman dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 23/07/2007, 19h47
  4. récupérer le Id lors d'un requête d'insertion
    Par Claire07 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 06/04/2007, 13h32
  5. Récupérer le numéro auto lors d'une insertion
    Par zoidy dans le forum Access
    Réponses: 5
    Dernier message: 27/04/2006, 11h20

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