[MySQL] Autoinkrement und Foreign Key

unique24

Grünschnabel
Hallo

Wenn ich eine Parent Tabelle habe und 3-4 Child Tabellen die mit einem Foreign Key angebunden sind, bin ich mir beim Füllen unsicher.

Ich muss erst die Parent row erstellen. Die ID wird über "Autoincrement" erstellt.
Danach kann ich erst die einzelnen Child Tabellen füllen, die auf die ID der Parent zeigen.

Wenn sich nun sehr viel auf der Datenbank tut, wie kann ich den angelegten Autoincrement werden auslesen?
Kann man das eventuell im INSERT schon mitübergeben?

Und kann es passieren das mir ein anderer Client eine row hinzufügt, bevor ich mit meinen eigenen Child´s beginne?
Dann würde der letzte Wert in der Parent Tabelle ja nicht MEINE Id sein.

Bzw. wenn ich das füllen ausschließlich mit Stored Procedure mache. Kann ich das zu 100% den passenden Autoincrement Wert zurückgeben lassen?

Danke!
 
Hallo

Danke! Soweit ich noch in der Zwischenzeit gelesen habe, sollte es keine Probleme geben wenn andere Clients in die DB schreiben, da die inser_id für den jeweilige Connection gilt?

Fohnbit
 
Ja, das muss/soll so sein.

Auf der PHP-Seite konnte ich keine Belege dafür finden, allerdings für die MySQL-Funktion LAST_INSERT_ID(), welche wahrscheinlich überall intern aufgerufen wird:
MySQL Doku hat gesagt.:
ie erzeugte Kennung wird auf dem Server verbindungsspezifisch gehandhabt: Der von der Funktion an einen bestimmten Client zurückgegebene Wert ist der erste AUTO_INCREMENT-Wert, der für die zuletzt abgesetzte Anweisung, die eine AUTO_INCREMENT-Spalte betraf, von diesem Client erzeugt wurde. Dieser Wert darf nicht von anderen Clients bearbeitet werden, auch wenn diese selbst AUTO_INCREMENT-Werte erzeugen. Dieses Verhalten gewährleistet, dass jeder Client seine eigene Kennung abrufen kann, ohne die Aktivitäten anderer Clients berücksichtigen oder Sperren setzen bzw. Transaktionen verwenden zu müssen.

Allerdings musst du aufpassen, wenn du mehrere Datensätze mittels eines INSERT-Statements einfügen: dort wird nur die ID des ersten eingefügten Datensatzes zurückgegeben.
MySQL Doku hat gesagt.:
Wichtig: Wenn Sie mehrere Datensätze mithilfe einer einzelnen INSERT-Anweisung einfügen, gibt LAST_INSERT_ID() nur denjenigen Wert zurück, der für den ersten eingefügten Datensatz erzeugt wurde. Grund hierfür ist, dass es möglich sein soll, dieselbe INSERT-Anweisung problemlos auf einem anderen Server zu reproduzieren.
 
Zurück