Laden...

2 MySql Inserts - ID von Insert 1 in Insert 2

Erstellt von Sascha87 vor 2 Jahren Letzter Beitrag vor 2 Jahren 282 Views
S
Sascha87 Themenstarter:in
48 Beiträge seit 2021
vor 2 Jahren
2 MySql Inserts - ID von Insert 1 in Insert 2

Verwendetes Datenbanksystem: <MySql (MariaDB)>

Edit: Das Problem hat sich gerade von selbst gelöst.
Die Lösung habe ich unten gepostet, falls jemand das gleiche Problem hat.

Hallo zusammen, ich möchte in zwei verschiedenen Tabellen Daten schreiben.
Das Problem dabei ist, in die zweite Tabelle soll die ID der ersten Tabelle mit geschrieben werden. Die ID wird in dem Moment allerdings erst automatisch (auto_increment) eingetragen.

Gibt es eine Möglichkeit diese direkt mit zu übergeben?


string query = "insert into uvorhaben (uvorhaben) value (@uvInsert) insert into faecherJahrgangUvorhaben (fachID, jahrgangID, uvorhabenID) value (@fachID, @jahrgangID, ID DIE ZU BEGINN AUTOMATISCH ANGELEGT WIRD";

Lösung:


string query = "insert into uvorhaben (uvorhaben) value (@uvInsert); insert into faecherJahrgangUvorhaben (uvorhabenID, fachID, jahrgangID) value (LAST_INSERT_ID(),@fachID, @jahrgangID)";

Vielen lieben Dank!
Grüße
Sascha

16.833 Beiträge seit 2008
vor 2 Jahren

Der Themenstarter hat mittlerweile selbst die Lösung gefunden und in den Startbeitrag editiert.
Damit der Thread nicht als unbeantwortet gilt, hier eine Dummyantwort.

C
55 Beiträge seit 2020
vor 2 Jahren

Hallo

Last Insert Id hat aber einige Fallstricke die man beachten sollte.
Ich habe das bei mir lokal auf Php My Admin ausprobiert. Zum Beispiel habe ich nur dann eine ID bekommen, wenn im gleichen SQL auch z.B. ein Insert durchgeführt habe. Habe dagegen nur:


SELECT LAST_INSERT_ID()

ausgeführt kam bei mir eine 0 zurück. Bedeutet LAST_INSERT_ID nur dann die korrekte ID zurück gibt, wenn du bei Query mit der selben Verbindung ausführst. Dann musst du sicher stellen, das dir niemand dazwischen funkt mit einem Insert oder Update.

Eventuell wäre ein Insert select eine bessere und sichere Variante. https://mariadb.com/kb/en/insert-select/

Grüße

D
30 Beiträge seit 2021
vor 2 Jahren

Hallo,

bei der Verwendung von SELECT LAST_INSERT_ID() bekomme ich bei MariaDB nur einen Fehler.

Würde aber den Wert im Zweifel Zwischenspeichern und dann entsprechend nutzen.
Was würde denn gegen die Verwendung des EF sprechen? Da ist das PK-Handling imho einfacher....

16.833 Beiträge seit 2008
vor 2 Jahren

Man braucht nicht immer ein ORM wie EF; sowas hat auch Overhead und lohnt sich nicht immer.
LAST_INSERT_ID() sollte unter MariaDB kein Fehler werfen. Ist eine valide Function und soweit ich weiß immer noch der empfohlene Weg auf MySQL/MariaDB.

Bedeutet LAST_INSERT_ID nur dann die korrekte ID zurück gibt, wenn du bei Query mit der selben Verbindung ausführst.

Ja und Nein. In Deinem Fall liegt es an phpMyAdmin.
Setz in den Settings PersistentConnections auf True und Du bekommst die Id.

Für seinen Fall spielt das ja keine Rolle.