sql >> Databáze >  >> RDS >> Mysql

LAST_INSERT_ID() se nerovná $db->insert_id?

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.




  1. ORA-01097

  2. Úvod do SQL Server 2017

  3. MySQL převádí datový typ sloupce z VARCHAR na INT

  4. Může dotaz MySQL změnit řádky na sloupce?