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.