SELECT LAST_INSERT_ID()
Quelqu'un peut-il expliquer comment fonctionne MySQL fonction LAST_INSERT_ID(). Je vais essayer d'obtenir l'id de la dernière ligne insérée en base de données, mais à chaque fois 1.
- Je utiliser mybatis.
Exemple de requête est :
<insert id="insertInto" parameterType="Something" timeout="0">
INSERT INTO something (something) VALUES (#{something})
<selectKey resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
Code:
System.out.println("Id : " + id)
De sortie:
Id : 1
Est votre id défini comme
l'id est de type autoincrement
Il pourrait également être un L'id est injecté dans l'objet de cas comme celui qui m'est arrivé, aka "vous n'avez pas bien lu les docs".
autoincrement
?l'id est de type autoincrement
Il pourrait également être un L'id est injecté dans l'objet de cas comme celui qui m'est arrivé, aka "vous n'avez pas bien lu les docs".
OriginalL'auteur Staba | 2012-04-24
Vous devez vous connecter pour publier un commentaire.
LAST_INSERT_ID
retourne la dernière valeur de implicitement inséré dans unAUTO_INCREMENT
colonne dans la session en cours.Pour rendre la colonne autoincrement, vous devez omettre de
INSERT
liste:ou de les fournir avec un
NULL
valeur:Après,
vous renverra la valeur
AUTO_INCREMENT
a inséré dans leid
colonne.Cela ne fonctionne pas si:
AUTO_INCREMENT
colonneLAST_INSERT_ID
dans une autre sessionLAST_INSERT_ID()
sera de retour la valeur de la première ligne insérée, pas la dernière).OriginalL'auteur Quassnoi
est par utilisateur et par connexion.
Vous pouvez en lire plus dans Doc MySQL.
est-il sécuritaire dans le pool de connexion? J'ai vu que quelqu'un a dit
last_insert_id
a un problème dans le cadre de la piscine parce que même connexion peut être réutiliser dans le cadre de la piscine.OriginalL'auteur Silviu
Je n'ai pas utilisé MyBatis encore, mais après l'insertion d'un élément dans le tableau, vérifiez que la valeur auto_increment est en train d'être mis à jour avec la suite de requête MySQL:
Assurez-vous également que vous n'avez pas explicitement la valeur que vous donnez à la
auto_increment
champ. Vous devez laisser le DB définir pour elle-même.Voici quelques autres choses que vous pourriez essayer:
Assurez-vous de lire le résultat sous la forme d'un nombre entier. Cette montre un cas analogue qui exige une conversion explicite de type Int32.
Si vous êtes en train de faire plusieurs insertions, sachez que seul l'ID de la première insertion d'un tuple est traité comme le
LAST_INSERT_ID
. Selon cette (Recherche deuse test
).OriginalL'auteur Karthik. V
J'ai deux solutions, après met en œuvre beaucoup plus compliqué j'ai trouver sur le second...
Je vais vous dire laquelle est la mieux ...
C'est assez simple... juste dans la requête insert cette
keyProperty="id"
Comme ceci :
<insert id="insertInto" parameterType="Something" keyProperty="id" timeout="0">
INSERT INTO something (something) VALUES (#{something})
</insert>
Requête retourne l'id de la ligne insérée
Merci!
OriginalL'auteur Staba
Exemple 1:
OriginalL'auteur zloctb
Vous devez utiliser un nom de Table pour sélectionner le dernier id inséré.
Exemple:
OriginalL'auteur Rim