El problema es que LAST_INSERT_ID(...);
con un argumento no devuelve el ID generado sino que establece el valor dado en la "memoria" de LAST_INSERT_ID()
y lo devuelve. Entonces, en su primera ejecución no se generó una ID incrementada automáticamente (usted proporcionó el valor) y LAST_INSERT_ID()
devuelve 0
. En tus siguientes ejecuciones guardas el valor next+1
en el almacenamiento interno de LAST_INSERT_ID()
, que devuelve el valor. Este comportamiento se describe en MySQL en 12.14 Funciones de información
:
De hecho, puede omitir LAST_INSERT_ID()
llamar y trabajar sin él.
INSERT INTO
officeRechNr (jahr,monat,zahl)
VALUES
(?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1
Esto insertará la fila (con el valor dado) o aumentará el contador.
Si desea el contador actual para un año y mes determinados, ejecute una instrucción SELECT simple. Tenga en cuenta que es posible que necesite transacciones o bloqueos porque un cliente diferente podría aumentar el contador antes de que lo obtenga con la instrucción SELECT.