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

Einfache MySQL-Frage zu Primärschlüsseln und einer Einfügung

Ihr Klarstellungskommentar besagt, dass Sie daran interessiert sind sicherzustellen, dass LAST_INSERT_ID() nicht das falsche Ergebnis liefert, wenn ein weiteres gleichzeitiges INSERT auftritt. Seien Sie versichert, dass es sicher ist, LAST_INSERT_ID() unabhängig von anderen gleichzeitigen Aktivitäten zu verwenden. LAST_INSERT_ID() gibt nur die letzte ID zurück, die während der aktuellen Sitzung generiert wurde.

Sie können es selbst ausprobieren:

  1. Öffnen Sie zwei Shell-Fenster, führen Sie in jedem mysqlclient aus und verbinden Sie sich mit der Datenbank.
  2. Shell 1:INSERT in eine Tabelle mit einem AUTO_INCREMENT-Schlüssel.
  3. Shell 1:SELECT LAST_INSERT_ID(), siehe Ergebnis.
  4. Shell 2:INSERT in dieselbe Tabelle.
  5. Shell 2:SELECT LAST_INSERT_ID(), siehe Ergebnis anders als Shell 1.
  6. Shell 1:SELECT LAST_INSERT_ID() noch einmal, siehe eine Wiederholung des früheren Ergebnisses.

Wenn Sie darüber nachdenken, ist dies der einzige Weg, der Sinn macht. Alle Datenbanken, die automatisch inkrementierende Schlüsselmechanismen unterstützen, müssen sich so verhalten. Wenn das Ergebnis von einer Racebedingung abhängt, bei der andere Clients möglicherweise gleichzeitig INSERT ausführen, gibt es keine zuverlässige Möglichkeit, den zuletzt eingefügten ID-Wert in Ihrer aktuellen Sitzung zu erhalten.