Le problème est que LAST_INSERT_ID(...);
avec un argument ne renvoie pas l'ID généré mais définit à la place la valeur donnée dans la "mémoire" de LAST_INSERT_ID()
et le retourne. Ainsi, lors de votre première exécution, aucun ID auto-incrémenté n'a été généré (vous avez fourni la valeur par vous-même) et LAST_INSERT_ID()
renvoie 0
. Dans vos exécutions suivantes, vous enregistrez la valeur next+1
dans le stockage interne de LAST_INSERT_ID()
, qui renvoie la valeur. Ce comportement est décrit dans MySQL dans 12.14 Fonctions d'information
:
En fait, vous pouvez ignorer le LAST_INSERT_ID()
appeler et travailler sans elle.
INSERT INTO
officeRechNr (jahr,monat,zahl)
VALUES
(?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1
Cela insérera la ligne (avec la valeur donnée) ou augmentera le compteur.
Si vous voulez le compteur actuel pour une année et un mois donnés, vous exécutez une simple instruction SELECT. Gardez à l'esprit que vous pourriez avoir besoin de transactions ou de verrous, car un client différent pourrait augmenter le compteur avant que vous ne le récupériez avec l'instruction SELECT.