Wolfgang: Autoincrement zugreifen

Hallo !!!

Habe eine Frage zu (My)SQL:

Ich habe eine kleine Adressdatenbank erstellt, welche ich via PHP bearbeite...

Wenn ich nun eine neue Adresse erstelle, möchte ich gerne die ID der neuen Adresse wissen, bevor diese eingetragen wird.
Nun wird ID aber mit 'AUTO_INCREMT' automatisch hochgezählt, d.h. ich weiß nicht wirklich welcher Wert denn nun kommt, es sei denn ich würde die "verbrauchten" Werte irgendwo zwischenspeichern, was ich aber eigentlich nicht möchte...

Weiß jmd, wie ich auf den nächsten Wert zurgreifen kann? (falls das überhaupt geht)

Danke schonmal für Antworten !

Gruß,

Wolfgang

  1. Hallo Wolfgang,

    Habe eine Frage zu (My)SQL:

    Du hast eine Frage zu MySQL :-)

    Wenn ich nun eine neue Adresse erstelle, möchte ich gerne die ID der neuen Adresse wissen, bevor diese eingetragen wird.

    Warum möchtest Du diese ID bereits vorher wissen? Reicht es Dir nicht, wenn Du _nach_ dem Einfügen des neuen Datensatzes diese ID erfährst? Das geht nämlich ganz einfach mit mysql_insert_id(). Beachte bitte den Warnungstext zu Spalten vom Typ BIGINT.

    Weiß jmd, wie ich auf den nächsten Wert zurgreifen kann? (falls das überhaupt geht)

    Normalerweise möchtest Du nicht auf den nächsten Wert zugreifen, sondern auf den zuletzt eingefügten :-) Falls Du Daten in weiteren Tabellen einfügen möchtest, die über diese ID miteinander verknüpft sind, so speichere die Daten in der richtigen Reihenfolge.

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz!

      Warum möchtest Du diese ID bereits vorher wissen? Reicht es Dir nicht, wenn Du _nach_ dem Einfügen des neuen Datensatzes diese ID erfährst? Das geht nämlich ganz einfach mit mysql_insert_id(). Beachte bitte den Warnungstext zu Spalten vom Typ BIGINT.

      Das ist vielleicht wirklich besser, werde es gleich mal probieren, Danke!!!

      Gruß,

      Wolfgang

      1. wie schön einfach die Welt doch sein kann, wenn man die richtigen Werkzeuge kennt ;-)

        Gruß,

        Wolfgang

        1. yo,

          wie schön einfach die Welt doch sein kann, wenn man die richtigen Werkzeuge kennt ;-)

          und noch schöner wird die welt, wenn man dann auch noch die gewünschten werkzeuge besitzt und benutzen kann..... ;-)

          Ilja

      2. Hello Wolfgang,

        Das ist vielleicht wirklich besser, werde es gleich mal probieren, Danke!!!

        Das ist nicht wirklich besser, sondern nur üblich.
        Da ich nicht weiß, ob MySQL in der freien Version inzwischen Transaktions-Kontrolle hat, könnte das nämlich auch zu Folgefehlern führen.

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. Hallo Tom,

          Das ist nicht wirklich besser, sondern nur üblich.

          Bitte begründe Deine Aussage. Es ist besser, nicht einfach nur üblich.
          MySQL-Handbuch.

          Da ich nicht weiß, ob MySQL in der freien Version inzwischen Transaktions-Kontrolle hat, könnte das nämlich auch zu Folgefehlern führen.

          Wenn Du in der gleichen Verbindung nach dem INSERT diesen Wert abrufst bevor ein anderes INSERT (über die gleiche Verbindung!) erfolgt hast Du genau den richtigen Wert, den Du benötigst. Ein Fehler kann nicht auftreten.

          Ein INSERT über eine andere Verbindung (ohne Table Locking) führt über SHOW TABLE STATUS hingegen zu einem falschen Wert. Das ist definitiv schlechter. Und Table Locking würde ich mir ebenfalls definitiv ersparen. Es ist überflüssiger Aufwand.

          Freundliche Grüße

          Vinzenz

          1. Hello Vinzenz,

            Bitte begründe Deine Aussage.

            Das hängt ganz davon ab, wie Du Deine Transaktion absicherst.

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

    2. Hello,

      Weiß jmd, wie ich auf den nächsten Wert zurgreifen kann? (falls das überhaupt geht)

      Man kann aber auch auf den nächsten Wer zugreifen bei MySQL:

      "Show Table Status;"

      liefert ein Resultset mit den gewünschten Angaben.

      Allerdings sind dann Abfrage des nächsten Aurowertes und Einfügen eines Datensatzes keine atomare Operation mehr, was ohne Table Locking zum Chaos führen könnte.

      Die Spalte mit dem nächsten Autowert heißt "Auto_increment"

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

      1. Hallo Tom,

        Allerdings sind dann Abfrage des nächsten Aurowertes und Einfügen eines Datensatzes keine atomare Operation mehr, was ohne Table Locking zum Chaos führen könnte.

        Warum sollte man sich die Mühe machen entweder einen unzuverlässigen Wert zu erfahren oder unnötiges Table Locking zu betreiben, wenn es überflüssig ist?

        Das Benutzen von Datenbanken gegenüber Flat Files erspart in vielen Fällen kompliziertes Filelocking (ich kann mich da an gewisse Artikel von Dir erinnern :-)). Warum dann Table Locking betreiben, wenn es sich vermeiden lässt. Ich sehe keine Vorteile.

        Freundliche Grüße

        Vinzenz

        1. Hello,

          Warum sollte man sich die Mühe machen entweder einen unzuverlässigen Wert zu erfahren oder unnötiges Table Locking zu betreiben, wenn es überflüssig ist?

          Ich habe auch nicht geschrieben, dass Wolfgang das so machen soll, sondern nur, wie er an den Wert herankommt, und ihn gleichzeitig auf das mögliche Risiko hingewiesen.

          Könnte schließlich auch sein, das er den nächsten Autowert nur zur Information benötigt.
          Siehe hierzu phpMyAdmin. Da wird er auch angezeigt.

          Wo ist also das Problem? :-)

          Harzliche Grüße vom Berg
          http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau