sql >> Database >  >> RDS >> Mysql

LAST_INSERT_ID() is ongelijk aan $db->insert_id?

Het probleem is dat LAST_INSERT_ID(...); met een argument retourneert niet de gegenereerde ID, maar stelt in plaats daarvan de gegeven waarde in het "geheugen" van LAST_INSERT_ID() in en geeft het terug. Dus bij je eerste uitvoering is er geen automatisch oplopende ID gegenereerd (je hebt de waarde zelf opgegeven) en LAST_INSERT_ID() retourneer 0 . In uw volgende uitvoeringen slaat u de waarde next+1 . op in de interne opslag van LAST_INSERT_ID() , die de waarde retourneert. Dit gedrag wordt beschreven in de MySQL in 12.14 Informatiefuncties :

In feite kunt u de LAST_INSERT_ID() . overslaan bel en werk zonder.

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

Dit zal de rij invoegen (met de gegeven waarde) of de teller verhogen.

Als u de huidige teller voor een bepaald jaar en een bepaalde maand wilt, voert u een eenvoudig SELECT-statement uit. Houd er rekening mee dat u mogelijk transacties of vergrendelingen nodig heeft, omdat een andere klant de teller zou kunnen verhogen voordat u deze ophaalde met de SELECT-instructie.




  1. Hoe een grote hoeveelheid gegevens in de sqlite-database in Android in te voegen

  2. Postgres - FATAL:databasebestanden zijn niet compatibel met de server

  3. Hoe rij bovenaan in mysql-query te plaatsen.

  4. Een gebruiker maken en machtigingen verlenen in Oracle