Einfache MySQL-Frage bezüglich Primärschlüssel und Einfügung

8

Wie erhalte ich in mysql den Primärschlüssel, der für eine Einfügeoperation verwendet wird, wenn er automatisch inkrementiert wird.

Grundsätzlich möchte ich, dass der neue automatisch inkrementierte Wert zurückgegeben wird, wenn die Anweisung abgeschlossen ist.

Danke!

    
MPX 03.10.2008, 00:07
quelle

4 Antworten

12

Ihre Klarstellung sagt, dass Sie daran interessiert sind, sicherzustellen, dass LAST_INSERT_ID () nicht das falsche Ergebnis liefert, wenn ein anderes gleichzeitiges INSERT auftritt. Seien Sie versichert, dass die Verwendung von LAST_INSERT_ID () ungeachtet anderer gleichzeitiger Aktivitäten sicher ist. 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 mysql aus Client in jedem und verbinden mit 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 einfügen.
  5. Shell 2: SELECT LAST_INSERT_ID (), Das Ergebnis unterscheidet sich von Shell 1.
  6. Shell 1: SELECT LAST_INSERT_ID () wieder, siehe eine Wiederholung von früher Ergebnis.

Wenn Sie darüber nachdenken, ist dies der einzige Weg, der Sinn ergibt. Alle Datenbanken, die automatisch inkrementierende Schlüsselmechanismen unterstützen, müssen auf diese Weise agieren. Wenn das Ergebnis von einer Racebedingung mit anderen Clients abhängt, die möglicherweise gleichzeitig EINFÜGEN, dann gibt es keine zuverlässige Möglichkeit, den zuletzt eingefügten ID-Wert in Ihrer aktuellen Sitzung zu erhalten.

    
Bill Karwin 03.10.2008, 00:42
quelle
6

MySQL LAST_INSERT_ID ()

    
Jonathan Lonowski 03.10.2008 00:11
quelle
0

Die MySQL-Dokumente beschreiben die Funktion: LAST_INSERT_ID ()

    
Nick 03.10.2008 00:15
quelle
0

[wähle max (primärer Schlüssel_Spaltenname) aus Tabellenname] Ahhh nicht unbedingt. Ich bin kein MySQL-Typ, aber es gibt einen spezifischen Weg, um die letzte eingefügte ID für die letzte abgeschlossene Aktion zu erhalten, die etwas robuster ist. Was ist, wenn zwischen dem Schreiben in die Tabelle und dem Abfragen eine Einfügung stattgefunden hat? Ich weiß davon, weil es mich vor vielen Monden gestochen hat (also ja, es passiert). Wenn alles andere fehlschlägt, lesen Sie das Handbuch: Ссылка

    
RhysC 03.10.2008 00:17
quelle

Tags und Links