Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
2 MySql Inserts - ID von Insert 1 in Insert 2
Sascha87
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

2 MySql Inserts - ID von Insert 1 in Insert 2

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Sascha87 am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15708
Herkunft: BW

beantworten | zitieren | melden

Der Themenstarter hat mittlerweile selbst die Lösung gefunden und in den Startbeitrag editiert.
Damit der Thread nicht als unbeantwortet gilt, hier eine Dummyantwort.
private Nachricht | Beiträge des Benutzers
ClaraSoft
myCSharp.de - Member



Dabei seit:
Beiträge: 24

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
dscNRW
myCSharp.de - Member



Dabei seit:
Beiträge: 17

beantworten | zitieren | melden

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....

private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15708
Herkunft: BW

beantworten | zitieren | melden

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.
Zitat
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.
private Nachricht | Beiträge des Benutzers