Ich versuche, die Datenbanktabellen für ein Projekt, an dem ich arbeite, schön und normalisiert zu halten, aber ich habe ein Problem festgestellt. Ich versuche herauszufinden, wie ich eine Zeile in eine Tabelle einfügen und dann herausfinden kann, was der Wert der auto_incremented id
Spalte gesetzt wurde, damit ich zusätzliche Daten in eine andere Tabelle einfügen kann. Ich weiß, dass es Funktionen wie mysql_insert_id
gibt, die "die ID erhalten, die von der vorherigen INSERT-Operation generiert wurde". Wenn ich mich aber nicht irre, gibt mysql_insert_id
nur die ID der allerletzten Operation zurück. Wenn die Site also über genügend Datenverkehr verfügt, gibt dies nicht unbedingt die ID der gewünschten Abfrage zurück, da zwischen dem Einfügen der Zeile und dem Suchen nach der ID möglicherweise eine andere Abfrage ausgeführt wurde. Ist dieses Verständnis von mysql_insert_id
korrekt? Alle Vorschläge, wie dies zu tun ist, werden sehr geschätzt. Vielen Dank.Abrufen des Index einer eingefügten Zeile
Antwort
LAST_INSERT_ID()
hat Sitzungsumfang.
Es wird den Identitätswert zurückgeben, der in der aktuellen Sitzung eingefügt wurde.
Wenn Sie keine Zeilen zwischen INSERT
und LAST_INSERT_ID
einfügen, wird es in Ordnung sein.
Beachten Sie aber, dass für mehrere Wert Einsätze, wird die Identität der ersten Reihe zurückkehren eingefügt, nicht die letzte:
INSERT
INTO mytable (identity_column)
VALUES (NULL)
SELECT LAST_INSERT_ID()
--
1
INSERT
INTO mytable (identity_column)
VALUES (NULL), (NULL)
/* This inserts rows 2 and 3 */
SELECT LAST_INSERT_ID()
--
2
/* But this returns 2, not 3 */
Sie könnten:
A. Angenommen, won‘ t ein Problem und Verwendung mysql_insert_id
oder
B. Fügen Sie einen Zeitstempel in die Zeile ein und rufen Sie die zuletzt eingefügte ID ab, bevor Sie sie in eine andere Tabelle einfügen.
Die allgemeine Lösung ist eines von zwei Dingen zu tun:
eine prozedurale Abfrage erstellen, die den Einsatz tut und ruft dann die letzte Eingabe id (. Verwenden, dh LAST_INSERT_ID()) und kehrt zurück es als Ausgabe von der Abfrage.
den Einsatz tun, das andere tun Einsatz, wo die ID-Wert etwas wie ist (wählen myid aus der Tabelle, wo somecolumnval = 'val')
2b. Oder machen Sie die Auswahl explizit und eigenständig, und führen Sie dann die anderen Einfügungen mit diesem Wert aus.
Der Nachteil der ersten ist, dass Sie einen Proc für jeden dieser Fälle schreiben müssen. Der Nachteil der zweiten ist, dass einige db-Engines das nicht akzeptieren, und es Ihren Code verdirbt, und kann langsam sein, wenn Sie einen where für mehrere Spalten tun müssen.
Dies setzt voraus, dass es Einsätze zwischen Ihren Anrufen gibt, über die Sie keine Kontrolle haben. Wenn Sie explizite Kontrolle haben, ist eine der anderen oben genannten Lösungen wahrscheinlich besser.
- 1. Index von eingefügten Zeilen aus einer MySQL-Datenbank abrufen
- 2. NSMutableDictionary repliziert den zuletzt eingefügten Index in jedem eingefügten Index anstelle des neuen Index
- 3. Universelles SQL-Konstrukt zum Abrufen der zuletzt eingefügten Zeile
- 4. Index des Python-Iteratorobjekts abrufen
- 5. PHP Index des zuletzt eingefügten Elements in Array erhalten
- 6. Index des in einen Vektor eingefügten Objekts erhalten
- 7. Abrufen der zuletzt eingefügten ID mit Mysql
- 8. Abrufen einer Zeile außerhalb Schleife
- 9. ändern Wert der eingefügten Zeile einer Spalte mit Trigger
- 10. Primärschlüssel aus der eingefügten Zeile jdbc?
- 11. Auswahl Sortierung Abrufen falscher Index des Arrays
- 12. Kann ich den Primärschlüssel einer eingefügten Zeile mit ODBC erhalten?
- 13. Der beste Weg, um PK Guid der eingefügten Zeile
- 14. Kann ich in ColdFusion eine Abfrage Zeile für Index abrufen?
- 15. NSDictionary-Schlüssel per Index abrufen?
- 16. ausgewählte Zeile durch AbstractTableModel abrufen
- 17. JTable Scrollen zu einer bestimmten Zeile Index
- 18. Erhalte Index der Zeile
- 19. Abrufen des Werts einer Ganzzahlvariablen
- 20. Wie erhalte ich mithilfe von ExecuteScalar die generierte ID aus einer eingefügten Zeile?
- 21. MongoDB - Return-ID des eingefügten Artikels
- 22. Index einer Gridview abrufen, wenn auf hyperlinkfeld geklickt wird
- 23. tcpdf sql Abfrage nur Abrufen einer Zeile
- 24. Wie finde ich den Index einer Zeile in SQL Server?
- 25. MySQL & Java - Get-ID des zuletzt eingefügten Wert (JDBC)
- 26. Den Integer-Index einer Pandas DataFrame-Zeile abrufen, die eine Bedingung erfüllt?
- 27. Den Index des gelöschten Objekts aus der Bindungsliste abrufen
- 28. Abrufen des Tabellennamens nach Position (Zeile) aus der Datenbank
- 29. Holen Sie die ID der eingefügten Zeile mit C#
- 30. Add 1 zu einer letzten eingefügten ID einer Zeile in mysql und PHP