Requête MySQL prochain numéro de séquence pour MYSQL auto-incrémenté champ
Dans MySQL, est-il possible d'interroger le numéro suivant dans la séquence pour un champ d'incrémentation automatique?
Pour une table appelée projets, la clé primaire de la table, project_id, est un champ d'incrémentation automatique. Avant d'insérer une nouvelle ligne, je souhaite savoir quel est le nombre le project_id sera attribué.
Comment puis-je interroger?
double possible de la recherche de la prochaine code disponible dans MySQL
double possible de Obtenir l'Auto Incrémentation de la valeur avec de requête MySQL
Maintenant, pourquoi n'étaient pas celles suggérées lorsque j'ai été poster la question..? J'ai vérifié plusieurs... =^/ Merci, je vais vérifier.
double possible de Obtenir l'Auto Incrémentation de la valeur avec de requête MySQL
Maintenant, pourquoi n'étaient pas celles suggérées lorsque j'ai été poster la question..? J'ai vérifié plusieurs... =^/ Merci, je vais vérifier.
OriginalL'auteur gibberish | 2012-09-04
Vous devez vous connecter pour publier un commentaire.
Débarrasser est correct. Cette question semble être un doublon de La recherche de la prochaine code disponible dans MySQL
Dans ce thread, l'utilisateur Eimantas fourni la solution de travail que j'ai utilisé. Reproduit ici par commodité:
SELECT Auto_increment FROM information_schema.tables WHERE table_name='the_table_you_want';
Bravo à eggyal et GavinTowey dans ce fil, même si, pour leur direction.
Futurs lecteurs sont priés de noter Gavin commentaire (à eggyal réponse) concernant les conditions de course (qui est: une autre base de données d'entrée qui se passe en une fraction de seconde avant le vôtre et "voler" l'ID que vous avez pensé que vous l'obtenir).
Utilisation de LAST_INSERT_ID() comme décrit par eggyal est fortement recommandé plus de la méthode décrite dans la présente réponse.
J'encourage les futurs lecteurs à upvote eggyal réponse, que c'est une meilleure approche, mais j'apprécierais pas plus loin downvotes à cette réponse. Puisque c'est ce que la question spécifiquement demandé, c'est le "correct" réponse - eggyals' downvotes malgré. J'ai confiance il n'y a pas de rancune; comme vous le savez, je reçois pas d'avantages pour le choix de mon propre réponse comme correcte.
Même si vous n'avez qu'un seul utilisateur, il est généralement difficile de les empêcher de (accidentellement) la soumission du formulaire plusieurs fois, éventuellement en succession rapide - grâce à cette approche pourrait également donner lieu à des buggy comportement. Étant donné la façon dont il est facile de faire les choses de la bonne façon, et quel sens il y a à appliquer les meilleures pratiques à chaque fois que possible (si rien d'autre, pour la discipline personnelle afin qu'elle devienne automatique lorsque c'est vraiment nécessaire), je ne vois aucune raison de l'exécution de cette opération d'une manière qui est sujette à l'erreur. -1
Et pourtant, cette question a été sollicité plus de 1000 fois, lorsque la question du titre est clair quant à ses intentions. D'autre part, je suis de nouveau en pensant à ce que vous dites. Je vais peut-être changer d'avis un jour. Jusqu'alors, je propose d'accord sur le désaccord.
OriginalL'auteur gibberish
Le faire dans l'autre sens: insérez le nouveau record du premier, puis de trouver sa valeur à l'aide
LAST_INSERT_ID()
.Pourquoi? Vos exigences sont indicatifs de la mauvaise conception. Voir qu'est-Ce que le XY problème?
Vous ne peut pas savoir avec certitude ce que sera la prochaine valeur. Dites que vous faites une requête pour savoir ce que la prochaine valeur la plus élevée est; puis un autre utilisateur insère une ligne, maintenant, votre réponse est incorrecte. C'est une "race condition". Il ya aussi des options de serveur comme auto_increment_offest et auto_increment_increment. Les nombres générés sont pas toujours séquentielle. Par conséquent, vous devez réellement faire de l'insert avant que vous savez quel numéro que vous générez.
Salut les gars, je comprends vos préoccupations. Je vais utiliser cette dans une routine qui est uniquement géré par le système de modérateur. Depuis le seul utilisateur de pouvoir l'exécuter, il n'y a pas de risque de supercedence. J'ai besoin de cette valeur pour un récursif dénomination du répertoire de routine, et sachant qu'il aforehand rationalise le processus. Mais je vous remercie pour avoir mon retour sur la conception.
Pas tout à fait une réponse parfaite. Il y a un peu de code (en particulier lors de la migration d'Oracle vers MySQL) qui se suivant de la séquence. tout d'abord, faire quelque chose, puis insérer plus tard. Je pense que la question est pratique, mais cette réponse n'est pas pratique.
OriginalL'auteur eggyal