welche id hat mein datensatz?



  • Hallo,
    ich habe eine Tabelle mit einem Feld 'ID' und 'Bezeichnung'. Das Feld 'ID' ist ein AutoIncrement-Feld. Ich würde jetzt gern nach einem insert die id ermitteln, die dieser Datensatz bekommen hat. Gibt es dazu einen SQL-Befehl? Den letzten ID-Wert kann ich ja nicht nehmen, da doch MySQL bei einem insert auch Datensätze auf freie Plätze innerhalb der DB speichert (habe ich im www gelesen).

    Ach ja, ich nutze MySQL 5...



  • Hä? Aber die ID steht doch dann im Feld drin?! 😕



  • Leider verwendest du eine Schrott-Datenbank ohne ordentliche Sequences *g* aber ich glaube so sollte es klappen:

    SELECT * FROM table WHERE id = LAST_INSERT_ID();
    

    MfG SideWinder



  • Zitat aus der MySQL Doku: http://dev.mysql.com/doc/refman/5.1/de/insert.html

    Wenn INSERT einen Datensatz in eine Tabelle einfügt, die eine AUTO_INCREMENT-Spalte enthält, dann können Sie den Wert dieser Spalte mithilfe der SQL-Funktion LAST_INSERT_ID() abfragen.

    P.S. SideWinder hat recht, wenn du mal mit einer Datenbank wie Oracle oder PostgreSQL gearbeitet hast, willst du nix anderes mehr. 😃
    Wenn du PHP nutzt für deine Datenbankabfragen, so kannst du die mysql_insert_id() von PHP nutzen.



  • Vielen Dank für die Antworten. Der Befehl 'Last_insert_id' ist genau das was ich suche 👍



  • Ich nochmal.

    Leider führt dieser Befehl nicht zum gewollten Ergebnis.
    Wenn ich

    insert into t_ereignisart (Bezeichnung) values ('TEST55');
    select * from t_ereignisart where id = last_insert_id();
    

    eingebe, bekomme ich als Ergebis leider NICHTS zurück 😕

    Woran liegt's???



  • Einfach nur "SELECT LAST_INSERT_ID()" tuts auch.



  • Aber nur wenn es auf der gleicher Verbindung zur DB "ohne diesen Socket zu schließen" und unmittelbar nach dem INSERT/REPLACE gemacht wird.
    Die MySQL-API stellt eine Funktion zur Verfügung welche immer den letzen AutoInc nach einem INSERt liefert.



  • Ich gebe doch, wie in meinem Code beschrieben, den Befehl mit 'LAST_INSERT_ID()' direkt gefolgt nach meinem 'insert...' ein. Dabei wird doch die gleiche Verbindung genutzt, oder?



  • Ja. Aber nur solange du den Befehl *direkt* nach deinem Insert ausführst. Und wenn du die gleiche Verbindung benutzt. Siehe was UnixTom sagt.



  • Sorry.

    Ich habe jetzt mal die SQL-Befehle in phpmyadmin abgesetzt und siehe da, er gibt mir nun die aktuelle ID an 🙄

    VIELEN DANK 👍

    PS: Ich habe es erst mit MySQLAdministrator versucht...



  • In phpmyadmin brauchst du das garnicht da dir phpmyadmin diese automatisch anzeigt.
    Last_Insert_ID funktioniert auch ur wenn du nur eine Datensatz einfügst. Sind es meherer wird nur die letzte ID zurückgegeben.
    Ob du die gleiche verbindung verwendet kann dir hier keiner sagen da niemand deinen Source sieht.
    Man kann ja eine Verbindung öffnen commando absetzen und dann connect schließen.
    Wenn mann das für jeden Query macht dann hast du nicht die immer die gleiche Verbindung.


Anmelden zum Antworten