Mysql
 sql >> Baza danych >  >> RDS >> Mysql

LAST_INSERT_ID() nie jest równe $db->insert_id?

Problem polega na tym, że LAST_INSERT_ID(...); z argumentem nie zwraca wygenerowanego identyfikatora, ale zamiast tego ustawia podaną wartość w "pamięci" LAST_INSERT_ID() i zwraca go. Tak więc w pierwszym wykonaniu nie został wygenerowany automatycznie zwiększany identyfikator (podałeś wartość samodzielnie) i LAST_INSERT_ID() zwróć 0 . W kolejnych wykonaniach zapisujesz wartość next+1 w pamięci wewnętrznej LAST_INSERT_ID() , który zwraca wartość. To zachowanie jest opisane w MySQL w 12.14 Funkcje informacyjne :

W rzeczywistości możesz pominąć LAST_INSERT_ID() zadzwoń i pracuj bez niego.

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

Spowoduje to wstawienie wiersza (z podaną wartością) lub zwiększenie licznika.

Jeśli chcesz mieć aktualny licznik za dany rok i miesiąc, uruchamiasz prostą instrukcję SELECT. Pamiętaj, że możesz potrzebować transakcji lub blokad, ponieważ inny klient może zwiększyć licznik przed pobraniem go za pomocą instrukcji SELECT.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Grupuj MySQL według dat między

  2. MYSQL usuwa wszystkie wyniki mające count(*)=1

  3. JDBC a usługa sieciowa dla Androida

  4. Czy istnieje konwencja nazewnictwa dla MySQL?

  5. Domyślne hasło mysql na serwerze ubuntu 16.04