Проблемът е, че LAST_INSERT_ID(...); с аргумент не връща генерирания идентификатор, а вместо това задава дадената стойност в "паметта" на LAST_INSERT_ID() и го връща. Така че, при първото ви изпълнение не беше генериран автоматично увеличен идентификатор (вие сте предоставили стойността сами) и LAST_INSERT_ID() върнете 0 . В следващите си изпълнения запазвате стойността next+1 във вътрешната памет на LAST_INSERT_ID() , което връща стойността. Това поведение е описано в MySQL в 12.14 Информационни функции
:
Всъщност можете да пропуснете LAST_INSERT_ID() обадете се и работете без него.
INSERT INTO
officeRechNr (jahr,monat,zahl)
VALUES
(?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1
Това ще вмъкне реда (с дадената стойност) или ще увеличи брояча.
Ако искате текущия брояч за дадена година и месец, изпълнявате обикновен оператор SELECT. Имайте предвид, че може да се нуждаете от транзакции или заключвания, защото друг клиент може да увеличи брояча, преди да го извлечете с оператора SELECT.