Sven Rautenberg: max() in Insert

Beitrag lesen

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>)