Christian: PERL / MySQL: auto_increment-Wert auslesen

Hallo,

gibt es eine Möglichkeit, WÄHREND des Eintragevorgang oder kurz danach die ID, die automatisch per auto_increment vergeben wurde, auszulesen? Ich benötige diese ID für das Speichern in einer weiteren DB. Bisher kam ich nur auf folgende sehr unelegante Lösung:

1. Datensatz in DB1 eintragen -> ID "auto_increment"

2. Suche in DB1 nach eingetragenen Werten und ausgabe ID

3. Speichern der ID und weiterer Daten in DB2

Da muss es doch ne bessere Alternative geben, oder? Welche Funktionen bieten mir hier Perl und MySQL?

Gruß
Christian

--
Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
  1. Hello,

    Da muss es doch ne bessere Alternative geben, oder? Welche Funktionen bieten mir hier Perl und MySQL?

    Perl? Keine Ahnung
    MySQL? LAST_INSERT_ID

    MfG
    Rouven

    --
    -------------------
    Ambition is the last refuge of failure.  --  Oscar Wilde (Irish Poet, Novelist, Dramatist and Critic, 1854-1900)
    1. Hallo,

      Perl? Keine Ahnung
      MySQL? LAST_INSERT_ID

      Ist das nicht unsicher? Was, wenn fast zeitgleich zwei Einträge stattfinden? Wenn also bis Last_Instert_ID ausgeführt wurde ein weiterer Eintrag in der DB gemacht wurde?

      Gruß
      Christian

      --
      Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
      1. Hello,

        Ist das nicht unsicher? Was, wenn fast zeitgleich zwei Einträge stattfinden? Wenn also bis Last_Instert_ID ausgeführt wurde ein weiterer Eintrag in der DB gemacht wurde?

        ich bin kein Spezialist für Perl, damit kann ich dir keine Gewissheit geben, aber bei PHP in Kombination mit MySQL wird das auf Basis der hergestellten Verbindung gehandhabt, d.h. wenn dein Skript zweimal läuft sind das zwei eindeutig getrennte und identifizierbare Verbindungen und die Datenbank ist durchaus in der Lage für jede davon die Frage zu beantworten, welche ID zuletzt vergeben wurde.

        MfG
        Rouven

        --
        -------------------
        Eine Bilanz ist wie der Bikini einer Frau. Sie zeigt fast alles, aber verdeckt das Wesentliche  --  Günter Stotz, Regierungsdirektor des baden-württembergischen Wirtschaftsministeriums
        1. Hallo,

          ich bin kein Spezialist für Perl, damit kann ich dir keine Gewissheit geben, aber bei PHP in Kombination mit MySQL wird das auf Basis der hergestellten Verbindung gehandhabt, d.h. wenn dein Skript zweimal läuft sind das zwei eindeutig getrennte und identifizierbare Verbindungen und die Datenbank ist durchaus in der Lage für jede davon die Frage zu beantworten, welche ID zuletzt vergeben wurde.

          Das Problem hier ist, dass nicht nur ein Script auf die Datenbank zugreift, sondern zwei ... Da kann es ja passieren, dass beide Scripte zeitgleich ablaufen und auf die DB zugreifen, oder? Meine Befürchtung ist dann, dass ich die LAST_ID des der Operation des 2. Scripts mit meinem Ursprungsscript auslese - das wäre fatal.

          Gruß
          Christian

          --
          Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
          1. Hello,

            Das Problem hier ist, dass nicht nur ein Script auf die Datenbank zugreift, sondern zwei ... Da kann es ja passieren, dass beide Scripte zeitgleich ablaufen und auf die DB zugreifen, oder? Meine Befürchtung ist dann, dass ich die LAST_ID des der Operation des 2. Scripts mit meinem Ursprungsscript auslese - das wäre fatal.

            ne, da hast du meine Aussage falsch interpretiert. Zwei vollkommen getrennte Skripte sollten zwei vollkommen unterschiedliche Verbindungen sein.

            MfG
            Rouven

            --
            -------------------
            Buy when there's blood running in the street and sell when everyone is pounding at your door, clawing to own your equities  --  Wisdom on Wallstreet
            1. Hallo,

              ne, da hast du meine Aussage falsch interpretiert. Zwei vollkommen getrennte Skripte sollten zwei vollkommen unterschiedliche Verbindungen sein.

              Ah ok, das wusste ich nicht. Dann passt das ja! Danke für die Auskunft :)

              Gruß
              Christian

              --
              Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
          2. Hallo,

            du misst der auto_increment Sache zuviel Bedeutung zu. Warum ist es wichtig, oder warum wäre es fatal, dass du die nächste auto_increment ID kennst oder nicht kennst? Weil du wahrscheinlich dann 1 dazuaddieren willst um die nächste ID zu erhalten? Wenn ja, sowas muss schiefgehen.

            Wenn du wirklich etwas eineindeutiges in der Grössenordnung von Insektenpopulationen benötigst um deinen Datensatz zu identifizieren, dann verwende UUIDs oder GUIDs. Das sind (imho) 128bit Zahlenwerte die u.a. mittels Zeit und der MAC-Adresse oder irgendwelchen anderen zusätzlichen hardwarebasierten Informationen des erstellenden Rechners erzeugt werden.

            Ciao, Frank *weder Perl, noch PHP, noch MySQL Spezialist*

            1. Hallo,

              du misst der auto_increment Sache zuviel Bedeutung zu. Warum ist es wichtig, oder warum wäre es fatal, dass du die nächste auto_increment ID kennst oder nicht kennst? Weil du wahrscheinlich dann 1 dazuaddieren willst um die nächste ID zu erhalten? Wenn ja, sowas muss schiefgehen.

              Nein, das habe ich nicht vor ... das wäre ja schwachsinnig. Wenn ich schon auto_increment verwende, werde ich natürlich NICHT noch manuell die nächste ID generieren. Warum fatal? -> siehe unten

              Wenn du wirklich etwas eineindeutiges in der Grössenordnung von Insektenpopulationen benötigst um deinen Datensatz zu identifizieren, dann verwende UUIDs oder GUIDs. Das sind (imho) 128bit Zahlenwerte die u.a. mittels Zeit und der MAC-Adresse oder irgendwelchen anderen zusätzlichen hardwarebasierten Informationen des erstellenden Rechners erzeugt werden.

              Ich kenne UUID und nutze das auch, aber für das betreffende Problem (und die betreffende Datenbank) ist das nicht nötig. Auto_increment garantiert mir ja, dass der Datensatz eindeutig zu identifizieren ist. Jede ID kommt nur EINMAL vor. Trotzdem muss ich eben für mein spezifisches Problem die RICHTIGE automatisch generierte ID kennen um diesen Wert in eine andere Tabelle eintragen zu können. Und es wäre dann fatal, wenn ich eine falsche ID hätte, da dann das Programm nicht so funktioniert, wie es soll. Die Verknüpfungen der Tabellen wäre dann falsch. Die Datensätze, die zusammen gehören, würden sich nicht kennen, um das mal blumig auszudrücken. Das Programm wäre nicht zu gebrauchen.

              Gruß
              Christian

              --
              Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
              1. Hi,

                ja, okay, dann sollte das Statement von Rouven volle Gültigkeit haben. Du hast von deinem Script eine eindeutige Verbindung zu MySql und für dieses eindeutige Verbindung gibt dir die genannte Funktion jeweils die letzte auf dieser Verbindung erzeugten auto_increment ID zurück, wenn ich dem Handbuch von MySQL glauben schenken darf. :)

                Cheers, Frank