SQL db_last_id, Bezugspunkt

Überkinger

Lieutenant
Registriert
Juli 2010
Beiträge
600
Hallo,

ich hab n Codeschnippsel:

$testr = db_last_id();


Bezieht sich db_last_id() auf die letzte Mysql-interne Abfrage? Auf welche Abfrage bezieht sich das. SELECT, UPDATE oder INSERT?
 
Die Last Id ist meistens die ID die der letzte Eintrag in der Datenbank besitzt. Wenn du den letzten Eintrag löschen solltest, dann Bezieht sich die Last Id auf den Eintrag davor.

Bei SELECT und UPDATE kannst du auswählen mit WHERE wo suchen willst, wenn du nichst angibst werden dir alle Einträge ausgegeben.

Ein Eintrag der mit Insert erstellt wurde, hat meistens nicht die LAST_ID + 1 da der Index der ID möglicherweise in der zwischen Zeit erhöht wurde.

Mit der Lastid sollte man nur arbeiten, wenn man weiß dass wenn man keine Transaktionen nutz der letzte Insert den man gerade im Script ausgeführt hat, nicht unbedingt durch die LAST ID identifiziert werden kann, da in der zwischen Zeit die Internetseite vielleicht 100 mal parallel geöffnet wird und erneut ein anderer Insert ausgeführt wurde.
 
Jomelo schrieb:
Die Last Id ist meistens die ID die der letzte Eintrag in der Datenbank besitzt. Wenn du den letzten Eintrag löschen solltest, dann Bezieht sich die Last Id auf den Eintrag davor.

Das bedeutet, dass bei folgender Reihenfolge die lastid von SELECTverwendet wird.

INSERT .....
UPDATE....
SELECT....

Seltsam ist, dass ich die letzte ID bzw. dessen Wert, den ich in eine Variable schreibe (siehe oben) nicht mit mit debug durch echo / print_r angezeigt bekommen

Mit der Lastid sollte man nur arbeiten, wenn man weiß dass wenn man keine Transaktionen nutz der letzte Insert den man gerade im Script ausgeführt hat, nicht unbedingt durch die LAST ID identifiziert werden kann, da in der zwischen Zeit die Internetseite vielleicht 100 mal parallel geöffnet wird und erneut ein anderer Insert ausgeführt wurde.

Das ist einleuchtend. Danke. Hat mir im Verständnis gut weitergeholfen.
 
Der Last-ID bezieht sich immer auf die aktuelle Verbindung, du musst also keine Angst haben, dass plötzlich sich der Wert verändert, weil ein anderer Prozess da was geändert hat.
Was nicht geht, dass du dann einfach sagst: "der nächste freie Index ist LAST_ID+1".

Praktisch ist das bei Einträgen mit Fremdschlüsseln:
Code:
insert into Person(a,b,c)values(a,b,c);
insert into Hobbies(Person,b,c)values(LAST_ID,'blah','blub');

Auf welche Abfrage sich die ID bezieht, ist nicht immer gleich, meist bezieht sie sich nur auf INSERTs, da dort die ID eindeutig ist (ein select mit 100k Zeilen hat welche ID?). (Deshalb heißt es bei MySQL auch mysql__insert_id()).
 
Zurück
Oben