Проблемът е, че 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.