MySQL - Autoincrement Feld - Fremdschlüssel

alles zu mySql/mariadb

Moderator: Moderatoren

Antworten
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

MySQL - Autoincrement Feld - Fremdschlüssel

Beitrag von brandelh »

Hallo,

Im PowerBasic Forum habe ich gerade abenteuerliche Konstrukionen gesehen bei der Aufgabe Daten in 2 Datenbanken anzulegen,
bei der in der ersten in einem autoinkrement Feld die UserID generiert wird und in der zweiten zu dieser UserID (Fremdschlüssel) Daten gespeichert werden sollen ...
Wie bekommt man nun für das zweite Replace raus, was MySQL als Wert für UserID vergeben hat ?

Hier steht es mit Beispielen ;-)

http://dev.mysql.com/doc/refman/5.0/en/ ... ue-id.html

Code: Alles auswählen

INSERT INTO Kunde (UserID,Name,...) VALUES(NULL,'Name',...);         # erzeugt neue UserID da NULL an autoincrement Feld übergeben wird.
INSERT INTO Infos(KundenNummer,text) VALUES(LAST_INSERT_ID(),'text');  # use UserID in second table
Gruß
Hubert
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: MySQL - Autoincrement Feld - Fremdschlüssel

Beitrag von nightcrawler »

funzt bei MySQL evtl auch ein SELECT @@identity?
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: MySQL - Autoincrement Feld - Fremdschlüssel

Beitrag von brandelh »

Sorry, ich versteh nur Bahnhof ;-)

Ich habe das dort nur gelesen und mir gedacht, dass könnte ich auch mal brauchen, schreibe es hier rein ;-)
Gruß
Hubert
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: MySQL - Autoincrement Feld - Fremdschlüssel

Beitrag von nightcrawler »

hab dummerweise nur die Frage, nicht die Lösung gesehen...und dann zu schnell geantwortet. µ$ SQL bietet statt der Funktion LAST_INSERT_ID() eine Variable namens @@IDENTITY. Daher meine Frage bzw mein Hinweis, ob das evtl die Lösung auch bei MySQL sein kann.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: MySQL - Autoincrement Feld - Fremdschlüssel

Beitrag von georg »

Hallo,


hierzu befrage man die MySQL Dokumentation, Abteilung CREATE TABLE. Ich zitiere von http://dev.mysql.com/doc/refman/5.5/en/ ... table.html

To retrieve an AUTO_INCREMENT value after inserting a row, use the LAST_INSERT_ID() SQL function or the mysql_insert_id() C API function. See Section 12.14, “Information Functions”, and Section 22.9.3.37, “mysql_insert_id()”.
Weitere Beschreibungen zu mysql_insert_id() finden sich hier: http://dev.mysql.com/doc/refman/5.5/en/ ... rt-id.html
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
bgl
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 43
Registriert: Di, 30. Aug 2011 20:45

Re: MySQL - Autoincrement Feld - Fremdschlüssel

Beitrag von bgl »

Wenn du mit LastInsertID arbeitest wäre eventuell eine Temporäre Variable hilfreich.

Code: Alles auswählen

INSERT INTO Kunde (UserID,Name,...) VALUES(NULL,'Name',...);         # erzeugt neue UserID da NULL an autoincrement Feld übergeben wird.
SET @tmpUserID = LAST_INSERT_ID(); # speichern: last insert id in @tmpuserid
INSERT INTO Infos(KundenNummer,text) VALUES(@tmpUserID,'text');  # use UserID in second table
SET @tmpInfoID = LAST_INSERT_ID(); # speichern: last insert id in @tmpinfoid
SELECT @tmpUserID AS UserID, @tmpInfoID AS InfoID; # nu sind beide auslesbar? 

Alternativ kannst du natürlich auch z.B. einen SELECT Last_Insert_ID(); durchführen und ggf. in einer Programmvariable speichern mit der du dann weiter arbeitest?
Antworten