Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Abfragen der letzten ID sinnvoll für Datenbankverknüpfungen?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Abfragen der letzten ID sinnvoll für Datenbankverknüpfungen?

    Ich habe ein Formular aus 2 Tabellen.
    1. Personendaten (Anrede, Vorname, Name)
    2. Adresse (Hausnummer,...)

    Beides soll mit einem Klick in eine Datenbank geschrieben werden.
    Person und Adresse sind zwei verschiedene Tabellen in einer Datenbank.

    Nun wird in der Tabelle Person mit Auto Increment eine eue ID für den Datensatz in Person erzeugt.
    Diese ID würde ich dann gerne in den Datensatz der Adresstabelle einfügen um eine Verknüpfung zwischen der Person und der Adresse zu erstellen.

    Kann man einfach die zuletzt vergebene ID abfragen?
    Was passiert wenn 2 Leute gleichzeitig einen Eintrag machen?
    Gibt es einen besseren weg?

  • #2
    Zitat von mw210 Beitrag anzeigen
    Kann man einfach die zuletzt vergebene ID abfragen?
    Stichwort: last_insert_id
    Tipp das zusammen mit deiner Schnittstelle in google ein, dann findest du einiges darüber.

    Zitat von mw210 Beitrag anzeigen
    Was passiert wenn 2 Leute gleichzeitig einen Eintrag machen?
    Dann hast du 2 User mit 2 neuen ID's. Was soll da Passieren? Die ID-Vergabe passiert Atomar.

    Zitat von mw210 Beitrag anzeigen
    Gibt es einen besseren weg?
    Nö.
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      Und dann könnte noch der Begriff "foreign key constraint" interessant sein. Damit kannst du sicherstellen, dass es zu jeder Adresse auch wirklich eine Person gibt und (beispielsweise) automatisch alle zugehörigen Adressen löschen, wenn eine Person gelöscht wird.

      Zitat von mw210 Beitrag anzeigen
      Was passiert wenn 2 Leute gleichzeitig einen Eintrag machen?
      Solang das von deiner Datenbank gemacht wird, wird es hier keine Probleme geben.

      Kommentar


      • #4
        Zitat von tkausl Beitrag anzeigen
        Nö.
        Doch, gibt es. WITH-Syntax.

        Du hast:

        Code:
        test=# create table master(id serial primary key, name text);
        CREATE TABLE
        test=*# create table slave (m_id int references master, val text);
        CREATE TABLE
        Nun Eingabe in beide Tabellen mit EINEM einzigen und atomaren SQL:

        Code:
        test=*# with new_id as (insert into master (name) values ('person1') returning id) insert into slave select new_id.id, 'irgend was' from new_id;
        INSERT 0 1
        test=*# select * from master;
         id |  name
        ----+---------
          1 | person1
        (1 row)
        
        test=*# select * from slave;
         m_id |    val
        ------+------------
            1 | irgend was
        (1 row)
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Am besten noch dazuschreiben, dass das ein Feature ist, dass frei verfügbaren Datenbanken wie PostgreSQL vorbehalten ist. Mysql kann so was nämlich nicht.

          Kommentar


          • #6
            Zitat von akretschmer Beitrag anzeigen
            Doch, gibt es. WITH-Syntax.
            Ich weiß

            Zitat von rkr Beitrag anzeigen
            Am besten noch dazuschreiben, dass das ein Feature ist, dass frei verfügbaren Datenbanken wie PostgreSQL vorbehalten ist. Mysql kann so was nämlich nicht.
            Genau deswegen hab ich nein gesagt, auf PostgreSQL hinzuweisen ist dir, akretschmer, vorbehalten
            [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

            Kommentar

            Lädt...
            X