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
Der Themenstarter hat mittlerweile selbst die Lösung gefunden und in den Startbeitrag editiert.
Damit der Thread nicht als unbeantwortet gilt, hier eine Dummyantwort.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
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....
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code