Patrick: max() in Insert

Hallo

Hab mal ne Frage:

Ich mache immer ne Abfrage Select MAX(id) FRom Datenbank

speicher das in ner Variablen und erhöhe diese um 1 und schreibe dann

Insert into Datenbank Values(DieVariable,....)

Kann man nicht direkt in dem insert befehl das "Max" raussuchen?

Patrick Müller

  1. Hi,

    vielleicht mit einem Subselect (also auf gar keinen Fall in MySQL), aber ich denke fast nicht, dass das geht. Muss es unbedingt die nächste Nummer sein, oder geht es nur um eine eindeutige Zahl?
    Falls ja, dann sei dir ein AutoIncrement oder AutoWert vorgeschlagen...

    MfG
    Rouven

    --

    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hallo

      Irh schreibt da beide von einem Autoincrement wie geht denn das?

      PAtrick Müller

  2. Moin!

    Ich mache immer ne Abfrage Select MAX(id) FRom Datenbank

    speicher das in ner Variablen und erhöhe diese um 1 und schreibe dann

    Insert into Datenbank Values(DieVariable,....)

    Benutzt du MySQL? Dann gibt es die wunderbare (und fehlerfrei funktionierende) Möglichkeit, deine ID-Spalte als "auto_increment" zu definieren - dann zählt sie nämlich automatisch hoch.

    Deine jetzige Variante hat das Problem, dass sie fehleranfällig ist. Angenommen, zwei Prozesse greifen gleichzeitig auf die Datenbank zu. Beide kriegen nacheinander das gleiche Ergebnis für die maximale ID, und beide senden den neuen Datensatz dann mit derselben ID in die Datenbank.

    Um das zu verhindern, muß die ID-Spalte dann zumindest einen Unique-Index haben.

    - Sven Rautenberg

    --
    "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
    (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)