J'ai une table dans laquelle de nouvelles données sont fréquemment insérées. J'ai besoin d'obtenir le tout dernier ID de la table. Comment faire ?
Est-il similaire à SELECT MAX(id) FROM table
?
J'ai une table dans laquelle de nouvelles données sont fréquemment insérées. J'ai besoin d'obtenir le tout dernier ID de la table. Comment faire ?
Est-il similaire à SELECT MAX(id) FROM table
?
Si vous utilisez PDO, utilisez PDO::lastInsertId
.
Si vous utilisez Mysqli, utilisez mysqli::$insert_id
.
Si vous utilisez toujours Mysql :
*S'il vous plaît, n'utilisez pas `mysql_` fonctions dans le nouveau code** . Ils ne sont plus entretenus et sont officiellement dépréciés . Voir le boîte rouge ? Apprendre déclarations préparées à la place, et utiliser AOP o MySQLi - cet article vous aidera à choisir. Si vous choisissez PDO, voici un bon tutoriel .
Mais si vous devez le faire, utilisez <a href="http://php.net/manual/en/function.mysql-insert-id.php" rel="noreferrer"><code>mysql_insert_id</code></a> .
Le problème est que si vous avez beaucoup d'insertions (par exemple, votre base de données enregistre également quelque chose), vous pouvez obtenir un mauvais identifiant.
@Mike Pas si vous utilisez mysql_insert_id
juste après votre mysql_query
. Si, bien sûr, vous exécutez plusieurs autres requêtes sur la même connexion entre-temps, eh bien, rien ne peut vous aider.
Pour garantir que vous n'obtiendrez JAMAIS d'identifiant erroné, entourez votre code d'une balise de type TRANSACTION .
Il existe une fonction permettant de savoir quel est le dernier identifiant inséré dans la connexion en cours.
mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();
plus l'utilisation max es un mauvaise idée parce que cela pourrait conduire à problèmes si votre code est utilisé en même temps dans deux sessions différentes.
Cette fonction est appelée mysql_insert_id
Avec AOP :
$pdo->lastInsertId();
Avec Mysqli :
$mysqli->insert_id;
*S'il vous plaît, n'utilisez pas `mysql_` fonctions dans le nouveau code** . Ils ne sont plus entretenus et sont officiellement dépréciés . Voir le boîte rouge ? Apprendre déclarations préparées à la place, et utiliser AOP o MySQLi - cet article vous aidera à choisir. Si vous choisissez PDO, voici un bon tutoriel .
C'est bon. Vous pouvez également utiliser LAST_INSERT_ID()
Utilisez mysql_insert_id() fonction.
Voir question similaire aquí
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.
1 votes
Oui, vous cette requête retournera le dernier id de la table. Mais une condition est que l'ID doit être une clé primaire. Ainsi vous pouvez éviter le repentir.
0 votes
Utilisez mysql_insert_id() fonction. Voir question similaire aquí
8 votes
@sathish : Le principal problème de cette méthode est Concurrence .
3 votes
Pour élaborer : Le problème, c'est que si quelqu'un d'autre insère quelque chose dans la table entre votre
INSERT
et demanderMAX(id)
vous pouvez obtenir un numéro d'identification qui n'est pas votre le dernier identifiant.0 votes
Nous devrions dire à l'auteur de la question que mysql_insert_id() fournit l'ID de l'enregistrement le plus récemment inséré, ce qui est ce que je pense qu'il demandait vraiment.
3 votes
@Jocelyn cette question a été posée a un an plus tard avec des milliers de vues en moins que cette question.
3 votes
@Neal, vous avez raison. L'autre question devrait être fermée car elle fait double emploi avec celle-ci.
0 votes
@Neal Je ne pense pas que l'âge de la question compte. Si c'était le cas, ils auraient probablement a mis en œuvre cette . Cependant, celui-ci a le meilleur contenu, donc la réouverture était logique.
0 votes
Toutes les réponses supposent que le programme en question a été le dernier à insérer dans le tableau. Et si ce n'était pas le cas ? Existe-t-il une meilleure solution que "select max(id) from table" ? Puisque, très probablement, il s'agit d'un nombre entier auto-incrémenté, la base de données ne devrait-elle pas déjà avoir le dernier ou le prochain nombre prêt ?
0 votes
En fait, j'ai trouvé où vous pouvez obtenir le champ AUTO_INCREMENT de la table information_schema.TABLES pour ce schéma et cette table. Cela fonctionne, mais c'est en fait beaucoup plus lent que la méthode select max, qui est en fait incroyablement rapide. Même sur une table de plus de 2 millions de lignes.
0 votes
MAX(id)
est si rapide, parce que c'est une lecture d'index seulement. Elle a juste besoin de lire les nombres log(n) de l'index et n'ouvre même pas la table en question. Pour une table de 2M, cela représente probablement 21 lectures de mémoire.0 votes
[[1]] [mysql_insert_id()] [1] Merci [1] : stackoverflow.com/questions/19383181/