Problemet är att LAST_INSERT_ID(...);
med ett argument returnerar inte det genererade ID:t utan ställer istället in det givna värdet i "minnet" för LAST_INSERT_ID()
och returnerar den. Så i din första körning genererades inget automatiskt inkrementerat ID (du angav värdet själv) och LAST_INSERT_ID()
returnera 0
. I dina följande körningar sparar du värdet next+1
i det interna minnet för LAST_INSERT_ID()
, som returnerar värdet. Detta beteende beskrivs i MySQL i 12.14 Informationsfunktioner
:
Faktum är att du kan hoppa över LAST_INSERT_ID()
ring och arbeta utan det.
INSERT INTO
officeRechNr (jahr,monat,zahl)
VALUES
(?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1
Detta kommer att infoga raden (med det angivna värdet) eller öka räknaren.
Om du vill ha den aktuella räknaren för ett givet år och månad kör du en enkel SELECT-sats. Tänk på att du kan behöva transaktioner eller lås eftersom en annan klient kan öka räknaren innan du hämtade den med SELECT-satsen.