Problem polega na tym, że LAST_INSERT_ID(...);
z argumentem nie zwraca wygenerowanego identyfikatora, ale zamiast tego ustawia podaną wartość w "pamięci" LAST_INSERT_ID()
i zwraca go. Tak więc w pierwszym wykonaniu nie został wygenerowany automatycznie zwiększany identyfikator (podałeś wartość samodzielnie) i LAST_INSERT_ID()
zwróć 0
. W kolejnych wykonaniach zapisujesz wartość next+1
w pamięci wewnętrznej LAST_INSERT_ID()
, który zwraca wartość. To zachowanie jest opisane w MySQL w 12.14 Funkcje informacyjne
:
W rzeczywistości możesz pominąć LAST_INSERT_ID()
zadzwoń i pracuj bez niego.
INSERT INTO
officeRechNr (jahr,monat,zahl)
VALUES
(?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1
Spowoduje to wstawienie wiersza (z podaną wartością) lub zwiększenie licznika.
Jeśli chcesz mieć aktualny licznik za dany rok i miesiąc, uruchamiasz prostą instrukcję SELECT. Pamiętaj, że możesz potrzebować transakcji lub blokad, ponieważ inny klient może zwiększyć licznik przed pobraniem go za pomocą instrukcji SELECT.