Problemet er, at LAST_INSERT_ID(...);
med et argument returnerer ikke det genererede ID, men angiver i stedet den givne værdi i "hukommelsen" af LAST_INSERT_ID()
og returnerer den. Så i din første udførelse blev der ikke genereret noget automatisk inkrementeret ID (du har selv angivet værdien) og LAST_INSERT_ID()
returner 0
. I dine følgende udførelser gemmer du værdien next+1
i det interne lager af LAST_INSERT_ID()
, som returnerer værdien. Denne adfærd er beskrevet i MySQL i 12.14 Informationsfunktioner
:
Faktisk kan du springe LAST_INSERT_ID()
over ring og arbejd uden.
INSERT INTO
officeRechNr (jahr,monat,zahl)
VALUES
(?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1
Dette vil indsætte rækken (med den givne værdi) eller øge tælleren.
Hvis du ønsker den aktuelle tæller for et givet år og måned, kører du en simpel SELECT-sætning. Husk, at du muligvis har brug for transaktioner eller låse, fordi en anden klient kunne øge tælleren, før du hentede den med SELECT-sætningen.