339 votes

Obtenir le nouvel ID de clé primaire d'enregistrement à partir de la requête d'insertion mysql?

Ok, donc disons que je suis en train de faire une base de données mysql INSERT dans une de mes tables, et le tableau a la colonne item_id qui est définie à l' autoincrement et primary key.

Comment puis-je obtenir la requête à la sortie de la valeur de la nouvellement générés clé primaire item_id dans la même requête?

Actuellement, je suis en cours d'exécution une seconde requête pour récupérer l'id, mais ce ne semble guère être une bonne pratique en considérant cela peut produire un mauvais résultat...

Si ce n'est pas possible, alors quelle est la meilleure pratique pour m'assurer de récupérer l'id correct?

442voto

Duncan Lock Points 2211

Vous devez utiliser l' LAST_INSERT_ID() fonction de: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

Par exemple:

INSERT INTO table_name (col1, col2,...) VALUES ('val1', 'val2'...);
SELECT LAST_INSERT_ID();

Cela vous aidera à reprendre l' PRIMARY KEY de la valeur de la dernière ligne que vous avez inséré:

L'ID qui a été généré est maintenu dans le serveur sur une fonction de la connexion. Cela signifie que la valeur renvoyée par la fonction pour un client donné est la première AUTO_INCREMENT valeur générée pour la plus récente déclaration affectant un type de colonne AUTO_INCREMENT par ce client.

Donc, ce n'est pas affectée par d'autres requêtes qui pourraient être en cours d'exécution sur le serveur à partir d'autres utilisateurs.

33voto

ATTENTION!!! de "LAST_INSERT_ID()" si l'on tente de renvoyer cette valeur de clé primaire dans PHP.

Je sais que ce thread n'est pas balisé php, mais pour quelqu'un qui est venu à travers cette réponse à la recherche de retour d'une base MySQL insert id à partir d'un script PHP insérer à l'aide de la norme mysql_query appels - il l'habitude de travailler et n'est pas évident sans la capture des erreurs SQL.

La plus récente mysqli prend en charge plusieurs requêtes qui LAST_INSERT_ID() est en fait une deuxième requête de l'original.

L'OMI une sélection distincte pour identifier la dernière clé primaire est plus sûr que l'option mysql_insert_id() fonction retournant l'AUTO_INCREMENT ID généré à partir de la précédente opération d'INSERTION.

22voto

Explosion Pills Points 89756

De la documentation LAST_INSERT_ID() :

L'identifiant généré est conservé sur le serveur connexion par connexion.

C'est-à-dire que si vous avez deux demandes distinctes au script simultanément, elles n'affecteront pas les LAST_INSERT_ID() (sauf si vous utilisez une connexion persistante).

20voto

PVR Points 1652

Ici ce que vous cherchez !!!

select LAST_INSERT_ID()

C'est la meilleure alternative de l' SCOPE_IDENTITY() fonction en cours d'utilisation en SQL Server.

Vous devez également garder à l'esprit que cela ne fonctionne que si Last_INSERT_ID() est déclenché suite à votre Insertde la requête. C'est la requête renvoie l'id inséré dans le schéma. Vous ne pouvez pas obtenir un tableau spécifique du dernier id inséré.

Pour plus de détails s'il vous plaît passer par le lien de L'équivalent de SQLServer fonction SCOPE_IDENTITY() dans mySQL?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X