Het probleem is dat LAST_INSERT_ID(...);
met een argument retourneert niet de gegenereerde ID, maar stelt in plaats daarvan de gegeven waarde in het "geheugen" van LAST_INSERT_ID()
in en geeft het terug. Dus bij je eerste uitvoering is er geen automatisch oplopende ID gegenereerd (je hebt de waarde zelf opgegeven) en LAST_INSERT_ID()
retourneer 0
. In uw volgende uitvoeringen slaat u de waarde next+1
. op in de interne opslag van LAST_INSERT_ID()
, die de waarde retourneert. Dit gedrag wordt beschreven in de MySQL in 12.14 Informatiefuncties
:
In feite kunt u de LAST_INSERT_ID()
. overslaan bel en werk zonder.
INSERT INTO
officeRechNr (jahr,monat,zahl)
VALUES
(?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1
Dit zal de rij invoegen (met de gegeven waarde) of de teller verhogen.
Als u de huidige teller voor een bepaald jaar en een bepaalde maand wilt, voert u een eenvoudig SELECT-statement uit. Houd er rekening mee dat u mogelijk transacties of vergrendelingen nodig heeft, omdat een andere klant de teller zou kunnen verhogen voordat u deze ophaalde met de SELECT-instructie.