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.