sql >> Databasteknik >  >> RDS >> Mysql

LAST_INSERT_ID() är inte lika med $db->insert_id?

Problemet är att LAST_INSERT_ID(...); med ett argument returnerar inte det genererade ID:t utan ställer istället in det givna värdet i "minnet" för LAST_INSERT_ID() och returnerar den. Så i din första körning genererades inget automatiskt inkrementerat ID (du angav värdet själv) och LAST_INSERT_ID() returnera 0 . I dina följande körningar sparar du värdet next+1 i det interna minnet för LAST_INSERT_ID() , som returnerar värdet. Detta beteende beskrivs i MySQL i 12.14 Informationsfunktioner :

Faktum är att du kan hoppa över LAST_INSERT_ID() ring och arbeta utan det.

INSERT INTO
    officeRechNr (jahr,monat,zahl)
VALUES
    (?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1

Detta kommer att infoga raden (med det angivna värdet) eller öka räknaren.

Om du vill ha den aktuella räknaren för ett givet år och månad kör du en enkel SELECT-sats. Tänk på att du kan behöva transaktioner eller lås eftersom en annan klient kan öka räknaren innan du hämtade den med SELECT-satsen.




  1. Oracle ORA-12154-fel på lokal IIS, men inte med Visual Studio Development Server

  2. Vilka är mer presterande, CTE eller temporära tabeller?

  3. Hur man får dagnamnet från ett datum i Oracle

  4. Hur man väljer kapslad JSON i SQL Server med OPENJSON