![]() |
Datenbank: mysql • Version: 8.0.15 • Zugriff über: MyDAC
Autoincwert zurück bekommen
Hallo die Gemeinde,
ich stehe hier irgendwie wie ein Ochs vorm Berg und sehe den Wald vor lauter Bäumen nicht. Ich mache ein query.insert - es werden auch alle Werte eingetragen. Nur die ID (unique, autoinc) bekomme ich nicht ausgelesen. Auch nicht nach query.post :?::?::?: Wie kann ich diesen Wert - am liebsten direkt nach query.insert - bekommen? also in der Form: meinwert := queryID.asInteger; beste Grüße aus dem Odenwald mcinternet |
AW: Autoincwert zurück bekommen
SQL-Code:
select LAST_INSERT_ID() from ...
|
AW: Autoincwert zurück bekommen
Zitat:
Greift das vor dem qry.post oder danach? Gruss mcinternet |
AW: Autoincwert zurück bekommen
Danach. Liefert immer die letzte ID einer Sitzung.
![]() |
AW: Autoincwert zurück bekommen
@mkinzler
Vielen lieben Dank :thumb::thumb: Problem ist damit gelöst *hauvorKopp* :roll::roll: Beste Grüße aus dem Odenwald mcinternet |
AW: Autoincwert zurück bekommen
Etwas eleganter ist doch
Code:
Sherlock
insert into table...returning autoinc_field
|
AW: Autoincwert zurück bekommen
Zitat:
|
AW: Autoincwert zurück bekommen
Ich muss ja gestehen ich bin kein Fan von Funktionen wie LAST_INSERT_ID().
Dabei ist es egal welche Datenbank das ist. Folgende Frage sollte man sich stellen: Was passiert wenn mehrere Datensätze eingefügt werden? Denn INSERT aus eine SELECT kann es. Was passiert wenn ein INSERT Trigger auslöst wird, welcher einen weiteren Datensatz in eine andere Tabelle einträgt. Welche ID bekommt man dann zurück? Daher verfolge ich immer strikt den Ansatz (beim MSSQL) das ich die OUTPUT Option bei INSERT nutze. Das liefert mir dann ein RESULTSET zurück, was wirklich in meiner Tabelle angelegt wurde und dessen IDs. |
AW: Autoincwert zurück bekommen
Zitat:
vielen Dank beste Grüße mcinternet |
AW: Autoincwert zurück bekommen
Last_insert_id() könnte theoretisch auch die falsche ID zurückliefern, da das "Holen" der ID ja nicht innerhalb der Abfrage erfolgt.
das returning von PosGresSQL/FireBird/... liefert den Wert als Teil der Abfrage zurück. OUTPUT von MSSQL liefert sogar wohl den kompletten Datensatz. |
AW: Autoincwert zurück bekommen
Wie ich gerade lesen konnte ist Last_Insert_ID verbindungsbezogen. Das bedeutet, selbst wenn andere gleichzeitig Datensätze anlegen, Last_Insert_ID gibt für die aktuelle Sitzung/Verbindung die korrekte letzte ID zurück. Aufwändig, aber wenn returning nicht unterstützt wird (Oracle muss halt MySQL irgendwie kleiner halten als das Hauptprodukt) die einzige Möglichkeit.
Sherlock |
AW: Autoincwert zurück bekommen
Kein Problem hier eine Demo für der MSSQL! (nicht MYSQL):
Code:
Nun der Insert:
CREATE TABLE [dbo].[Demo](
[Id] [int] IDENTITY(1,1) NOT NULL, [Text] [varchar](max) NOT NULL, CONSTRAINT [PK_Demo] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Code:
Liefert als Resultset:
INSERT INTO [dbo].[Demo] ([Text])
output inserted.Id, inserted.Text VALUES ('Hund'), ('Katze'), ('Maus') GO
Code:
Sprich, dass was ich einfüge dafür habe ich auch die exakten Keys. Also nicht das was vielleicht noch im Hintergrund abläuft durch Trigger oder parallel laufenden Prozessen.
1 Hund
2 Katze 3 Maus |
AW: Autoincwert zurück bekommen
Es geht aber um MySQL!
|
AW: Autoincwert zurück bekommen
Zitat:
|
AW: Autoincwert zurück bekommen
Zitat:
Wow! Das kannte ich noch nicht. Ich hole immer mit @@Identity die ID mit einer separaten Query nach dem Insert. Aber wie kann das Resultset mit der Output Query geholt werden? Ist es Qry.FieldByName('Inserted.Id') oder so? Und wie ist die Performance verglichen mit einem "normalen" Insert? |
AW: Autoincwert zurück bekommen
Zitat:
|
AW: Autoincwert zurück bekommen
Kennt MyDac
Delphi-Quellcode:
nicht?
Query.LastInsertId
Edit: Bei MyDAC ist es Query.InsertId .. LastInsertId ist von UniDac |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz