Philipp Hasenfratz: MySQL: Nächsten Auto-Increment-Wert herausfinden

Beitrag lesen

Halihallo Jan

Wie kann ich auf eine sichere Art und Weise den nächsten Wert eines Auto-Increment-Feldes herausfinden?

Ohne Umstände gar nicht.

Bisher hab ich es immer so gemacht, dass den letzten Eintrag herausgelesen hab und dann einfach 1 dazugezählt.

Huch, was passiert, wenn zwischen SELECT und INSERT ein anderer
Datensatz eingefügt wurde? - Vergiss diese Lösung sehr schnell!

Doch teste grad an einem Script herum und habe den letzten Eintrag gelöscht (mit ID 27), und bei einem weiteren Eintrag setzt er eben dort an, wo er war (ID 28).

Das ist auch richtig so. Falls ein Datensatz mit 27 irgendwo
referenziert wird, dann jedoch gelöscht wird und ein neuer Eintrag
(der nichts mit dem alten zu tun hat) an der "Stelle" 27 eingesetzt
werden würde, so wären zwei völlig Inhaltsfremde Datensätze
miteinander verknüpft. Um diesen groben Fehler auszuschliessen, wird
auch bei DELETE der Next_Autoincrement nicht um eins dekrementiert.

http://www.mysql.com/doc/en/SHOW_TABLE_STATUS.html
"Auto_increment".

Merke aber, dass auch das Auslesen dieses Wertes *nicht* der nächste
Autoincrement sein muss. Um sicherzugehen, musst du die Tabelle
umbedingt mit einem Schreib-LOCK versehen.

Allgemein sehe ich den Sinn deiner Aktion nicht. Warum versuchst du
den nächsten Wert zu erraten? - Er wird ja automatisch generiert und
das ist richtig. Um die zuletzt eingefügte ID zu finden gibt es in
allen DBI's Möglichkeiten, suche nach last_insert_id /
last_inserted_id, ... und lies die Doku deiner
Datenbankschnittstelle.

Viele Grüsse

Philipp