Fortlaufende ID bekommen bei INSERT (SQL)

  • Frage mich gerade wie ich die Fortlaufende ID bekomme, wenn ich einen neuen User in der db erstelle, dabei ja aber die ID noch nicht kenne.
    Ein INSERT INTO gibt ja nix zurück. Ist es möglich die durch INSERT erstelle ID zu bekommen?



    EDIT:
    trigger wäre ja auch nixht schlecht. Da steh ich allerdings vor der Frage, wie ich dem Trigger die neue ID übergebe`oO?


    Doch selbst rausgefunden :D
    Falls jemand noch was sieht (fehler, tipps oder so wegen dem trigger) immer her damit

  • Kann man das der Tabelle nicht schon direkt beim Erstellen mitgeben?

    SQL
    CREATE TABLE IF NOT EXISTS Tabellenname (
          ID        INT AUTO_INCREMENT PRIMARY KEY,
    /* Weitere Tabellenspalten */
    )


    Da hast du dann eine ID Spalte, die sich selbst automatisch erhöht. Ist das nicht das, was du wolltest?

  • Nein, ich hab mehrere Tabellen.
    Die tabelle 'profiles' enthält die Grunddaten und fortlaufende ID.
    Andere Tabellen besitzen dann Werte wie zB Einstellungen, PM, ect. Die werden dann via ID angesprochen.


    Bei einem INSERT INTO profiles bekommt der neu erstellte Nutzer ja eine neue ID, die ich nicht kenne, weil ja fortlaufend ...
    Um den neuen Nutzer jetzt bei den anderen Tabellen bekannt zu machen brauch ich ja die ID.
    Und das hab ich jetzt mit dem Trigger gelöst, idem der Trigger einen neuen Eintrag in den jeweiligen Tabellen vornimmt =)


    Was aber nervt ist, dass DELIMITER nicht bei prepared statements (sql, PDO) funktionier :(
    Also kann ich nur eine Anweisung per Trigger via Script erstellen lassen ...

  • trigger ist relativ einfach. Schließe mich aber gerade der "Seite" der "nicht triggernden" an :D
    Trigger sind ja schön. Nur verursachen die nur kopfschmerzen.
    Es ist einfach besser die tabellen in beziehung zu setzen (fremdschlüssel ...@innoDb) und so entscheiden zu lassen, wann was geändert oder gelöscht wird.


    bsp:
    2 tabellen:
    mastertabelle "benutzer", (id,name, ...)
    detailtabelle "benutzereinstellungen" (nr[autoincrement],id,einstell1,einstell2,...)


    die beiden werden nun "verknüpft" per "foreign key" (freamdschlüssel)

    SQL
    ALTER TABLE ´dbname´.`benutzereinstellungen` -- die detailtabelle "benutzereinstellungen" ändern
        ADD CONSTRAINT `foreignkeyname` -- irgend ein name
        FOREIGN KEY (`id`) -- die spalte "id" der detailtabelle "benutzereinstellungen" ist ein fremdschlüssel
        REFERENCES `dbname`.`benutzer` (`id`) -- spalte "id" der mastertabelle "benutzer" ist die referenz
        ON DELETE CASCADE -- beim löschen in der mastertabelle => auch in dieser tabelle löschen
        ON UPDATE NO ACTION -- bei update in der mastertabelle => keine aktion
    ;


    Also - keine trigger mehr =)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!