Mysql
 sql >> Datenbank >  >> RDS >> Mysql

LAST_INSERT_ID() ist ungleich $db->insert_id?

Das Problem ist, dass LAST_INSERT_ID(...); mit einem Argument gibt nicht die generierte ID zurück, sondern setzt stattdessen den angegebenen Wert in den "Speicher" von LAST_INSERT_ID() und gibt es zurück. Bei Ihrer ersten Ausführung wurde also keine automatisch inkrementierte ID generiert (Sie haben den Wert selbst bereitgestellt) und LAST_INSERT_ID() gibt 0 zurück . In Ihren folgenden Ausführungen speichern Sie den Wert next+1 im internen Speicher von LAST_INSERT_ID() , die den Wert zurückgibt. Dieses Verhalten ist in MySQL in 12.14 Informationsfunktionen :

Tatsächlich können Sie LAST_INSERT_ID() überspringen anrufen und ohne sie arbeiten.

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

Dies fügt die Zeile (mit dem angegebenen Wert) ein oder erhöht den Zähler.

Wenn Sie den aktuellen Zähler für ein bestimmtes Jahr und einen bestimmten Monat wünschen, führen Sie eine einfache SELECT-Anweisung aus. Denken Sie daran, dass Sie möglicherweise Transaktionen oder Sperren benötigen, da ein anderer Client den Zähler erhöhen könnte, bevor Sie ihn mit der SELECT-Anweisung abgerufen haben.