Zum Inhalt springen

MySQL: LAST_INSERT_ID()


FinalFantasy

Empfohlene Beiträge

Ich habe hier eine Datenbanktabelle, in diese will ich in einer PHP-Schleife bis zu 5 Inserts machen.

Die Inserts sehen etwa so aus:

INSERT INTO tab VALUES (LAST_INSERT_ID(), ...)

Das Problem ist das LAST_INSERT_ID(). Das Insert im ersten Schleifendurchlauf wir korrekt in die Datenbank geschrieben.

Bei allen folgenden bekomme ich den Fehler, dass der Primary Key (welcher durch das LAST_INSERT_ID() angegeben wird) schon in der Tabelle vorhanden ist.

Die Frage ist jetzt, wie, bzw, wann wird LAST_INSERT_ID weitergezählt?

Ich habe schon versucht, jedes Insert mit einem Commit Work abzuschliessen, aber das hilft auch nicht.

Anscheinend wird die LAST_INSERT_ID nicht bei jedem Insert hochgezählt, weil folgendes Konstrukt ja auch funkioniert:

INSERT INTO tab VALUES (LAST_INSERT_ID()...)

SELECT id FROM tab WHERE key = LAST_INSERT_ID

Damit bekomme ich den Key des letzten Eintrags zurück, also den, der durch LAST_INSERT_ID geschrieben wurde, die ID kann also beim anschliessenden SELECT noch nicht hochgezählt sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem ist das LAST_INSERT_ID(). Das Insert im ersten Schleifendurchlauf wir korrekt in die Datenbank geschrieben.

Bei allen folgenden bekomme ich den Fehler, dass der Primary Key (welcher durch das LAST_INSERT_ID() angegeben wird) schon in der Tabelle vorhanden ist.

Ich gehe davon aus, dein Feld ist ein Auto_Increment Feld. LAST_INSERT_ID liefert den zuletzt vergebenen AutoInc Wert zurück, vergibt allerdings keinen neuen.

INSERT INTO Tabelle VALUES (NULL, ...)

hilft dir dabei.

siehe http://dev.mysql.com/doc/mysql/en/Getting_unique_ID.html

When a new AUTO_INCREMENT value has been generated, you can also obtain it by executing a SELECT LAST_INSERT_ID() statement mysql_query() and retrieving the value from the result set returned by the statement.

For LAST_INSERT_ID(), the most recently generated ID is maintained in the server on a per-connection basis. It will not be changed by another client. It will not even be changed if you update another AUTO_INCREMENT column with a non-magic value (that is, a value that is not NULL and not 0).

oder

http://dev.mysql.com/doc/mysql/en/ODBC_and_last_insert_id.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also wird das Auto_increment Feld (ja es ist eins) bei

INSERT INTO tab VALUES (NULL,...)

hochgezählt??

Dann versteh ich aber nicht, wieso

INSERT INTO tab VALUES (LAST_INSERT_ID(),...)

funktioniert? Das müsste doch dann generell einen Fehler bringen, weil der letzte Index ja scho vergeben ist und ich somit IMMER einen doppelten primary Key hätte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

du kannst auch einfach anstatt mit VALUES, dann mit SET arbeiten


INSERT INTO tab SET name ='abc', position=15

Dadurch das du dann im SET-Clause keinen expliziten Wert für die ID angibts und diese eine AutoIncrement Column ist, würde er dir automatisch eine fortlaufende zahl einfügen

Du kannst übrigens auch in PHP die Last insert ID herausfinden:

@see http://de3.php.net/manual/en/function.mysql-insert-id.php

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...