J'essaie de conserver les tables de base de données pour un projet sur lequel je travaille bien et normalisé, mais j'ai rencontré un problème. J'essaie de comprendre comment je peux insérer une ligne dans une table et ensuite découvrir quelle est la valeur de la colonne auto_incremented id
pour que je puisse insérer des données supplémentaires dans une autre table. Je sais qu'il existe des fonctions telles que mysql_insert_id
qui "obtiennent l'ID généré à partir de l'opération INSERT précédente". Cependant, si je ne me trompe pas mysql_insert_id
retourne juste l'ID de la toute dernière opération. Ainsi, si le trafic sur le site est suffisant, cela ne renverra pas nécessairement l'identifiant de la requête car une autre requête aurait pu être exécutée entre l'insertion de la ligne et la recherche de l'identifiant. Cette compréhension de mysql_insert_id
est-elle correcte? Toutes les suggestions sur la façon de le faire sont grandement appréciées. Merci.Récupération de l'index d'une ligne insérée
Répondre
LAST_INSERT_ID()
a une portée de session.
Il retournera la valeur d'identité insérée dans la session en cours. Si vous n'insérez aucune ligne entre INSERT
et LAST_INSERT_ID
, cela fonctionnera bien.
Notez cependant que pour de multiples insertions de valeur, il renvoie l'identité de la première ligne insérée, pas le dernier:
INSERT
INTO mytable (identity_column)
VALUES (NULL)
SELECT LAST_INSERT_ID()
--
1
INSERT
INTO mytable (identity_column)
VALUES (NULL), (NULL)
/* This inserts rows 2 and 3 */
SELECT LAST_INSERT_ID()
--
2
/* But this returns 2, not 3 */
Vous pouvez:
A. Supposons que won » t un problème et l'utilisation mysql_insert_id
ou
B. Incluez un horodatage dans la ligne et récupérez le dernier ID inséré avant de l'insérer dans une autre table.
La solution générale est de faire l'une des deux choses:
Créer une requête de procédure qui fait l'insert et récupère ensuite le dernier identifiant Inséré (. En utilisant, par exemple LAST_INSERT_ID()) et renvoie comme sortie de la requête.
Est-ce que l'insert, effectuez un autre insert où l'identifiant est quelque chose comme (sélectionnez myid de table où 'val' somecolumnval =)
2b. Ou faites le select explicite et autonome, puis faites les autres insertions en utilisant cette valeur. L'inconvénient de la première est que vous devez écrire un proc pour chacun de ces cas. L'inconvénient de la seconde est que certains moteurs de base de données n'acceptent pas cela, et cela encombre votre code, et peut être lent si vous devez faire un où sur plusieurs colonnes.
Cela suppose qu'il peut y avoir des insertions entre vos appels sur lesquels vous n'avez aucun contrôle. Si vous avez un contrôle explicite, l'une des autres solutions ci-dessus est probablement meilleure.
- 1. Clé primaire de la ligne insérée jdbc?
- 2. Je perds ma ligne nouvellement insérée lorsque j'annule l'événement BeforeRowUpdate
- 3. Construction SQL universelle pour récupérer la dernière ligne insérée
- 4. SQL Server - Quelle est la date/heure de la dernière ligne insérée d'une table?
- 5. Puis-je obtenir la clé primaire d'une ligne insérée, en utilisant ODBC?
- 6. Comment récupérer le datetime lorsqu'une ligne a été insérée/mise à jour dans Sql Server 2005?
- 7. Oracle - retourne la valeur de clé nouvellement insérée
- 8. Le générateur NHibernate HiLo ID effectue un aller-retour vers la base de données par ligne insérée
- 9. Récupération de données
- 10. Récupération d'application
- 11. Récupération d'une ligne, avec des données provenant d'une table de paire clé-valeur dans MySQL
- 12. Comment puis-je obtenir la dernière clé primaire insérée?
- 13. Conversion d'une chaîne insérée en une expression compilable
- 14. Récupération de cellules dans UITableView
- 15. Wordpress récupération Enfants de poste
- 16. Récupération de carnet d'adresses Yahoo
- 17. Récupération de la partition formatée
- 18. Récupération HyperSQL Base de données
- 19. Récupération de la corruption Subversion
- 20. Récupération de types d'argument génériques
- 21. Gammes de dates de récupération de contenu
- 22. Confusions de mode de récupération SQL Server et de récupération en bloc
- 23. comment obtenir la dernière insérée Id d'une base de données Sqlite en utilisant Zend_Db
- 24. Récupération après sinistre Sharepoint
- 25. récupération des informations exécutables
- 26. Récupération d'un problème d'enregistrement
- 27. Récupération d'une clé ArrayListMultimap
- 28. Récupération de l'ID de l'appelant iPhone - TOOLCHAIN
- 29. Documents de modèle de récupération après sinistre
- 30. chaîne de format Récupération de l'objet Format