Problém je v tom, že LAST_INSERT_ID(...); s argumentem nevrátí vygenerované ID, ale místo toho nastaví danou hodnotu v "paměti" LAST_INSERT_ID() a vrátí to. Takže při vašem prvním spuštění nebylo vygenerováno žádné automaticky zvýšené ID (hodnotu jste zadali sami) a LAST_INSERT_ID() vrátí 0 . V následujících provedeních uložíte hodnotu next+1 v interním úložišti LAST_INSERT_ID() , který vrátí hodnotu. Toto chování je popsáno v MySQL v 12.14 Informační funkce
:
Ve skutečnosti můžete přeskočit LAST_INSERT_ID() zavolejte a pracujte bez něj.
INSERT INTO
officeRechNr (jahr,monat,zahl)
VALUES
(?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1
Tím vložíte řádek (s danou hodnotou) nebo zvýšíte počítadlo.
Pokud chcete aktuální počítadlo pro daný rok a měsíc, spusťte jednoduchý příkaz SELECT. Mějte na paměti, že možná budete potřebovat transakce nebo zámky, protože jiný klient by mohl zvýšit počítadlo dříve, než jej načtete pomocí příkazu SELECT.