Sven Rautenberg: AUTO-Wert zurücksetzen?

Beitrag lesen

Moin!

ich benutze MySQl in einer WAMP-Konfiguration und habe eine Tabelle mti einem auto_increment Primärschlüssel. wenn ich nun die datenbank leere (über multiple DELETE's) dann zählt der Zähler nicht beim letzten möglichen wert weiter, sondern sort, wo er auch vor der löschoperation schon war. kann ich diesen zeiger irgendwie zurücksetzen? wenn ich z.B. aus 10 datensätzen 9 gelöscht habe hätte ich den zähler gerne auf 1 udn nicht auf 11...

Der auto_increment-Wert ist dazu da, eine jederzeit eindeutige ID zu generieren.

Eine ID ist dann eindeutig, wenn nur der jeweils erstelle Datensatz diese ID trägt, aber niemals vorher oder nachher ein anderer Datensatz diese ID abkriegt.

Insofern ist es absolut normal, dass ein Datenbanksystem auch beim Löschen von IDs keine IDs erneut vergibt.

Denn stell dir mal vor, du nimmst in einer anderen Tabelle auf diese IDs Bezug. Dann war ID 10 mal "Hans Meier", wurde aber gelöscht. Durch einen Fehler wurde in der zweiten Tabelle aber nichts gelöscht. Dann kommt eine neue ID 10 mit "Peter Müller". Und plötzlich ist der Eintrag in der zweiten Tabelle wieder gültig.

Oder ein anderes Szenario: Zwei Leute arbeiten parallel an der Datenbank. Der eine läßt sich eine Liste aller Datensätze ausgeben und macht dann Mittagspause. Der zweite läßt sich danach die Liste ausgeben, löscht den letzten Eintrag und fügt dann noch einen neuen Eintrag hinzu. Der gelöschte Eintrag hatte die ID 10, der neue Eintrag auch. Der erste kommt dann aus der Mittagspause wieder, klickt noch kurz an, dass ID 10 gelöscht werden soll (der alte Eintrag zur ID 10 wird ja noch angezeigt) - und schon ist der neue Eintrag mit ID 10 weg. Wenn jeweils neue IDs für neue Datensätze vergeben werden, kann dieses Problem garnicht erst entstehen.

Hoffe das geht (phpMyAdmin kann's auch, also hoffe ich auf eine einfache Lösung..).

Eine Lösung gibts, wenn du mal verrätst, wozu du überhaupt IDs brauchst. Ok, jede Datenbank sollte eine haben, aber das, was du willst, sieht doch ganz danach aus, als ob du Datensätze _zählen_ willst. Und dafür sind IDs nicht geschaffen. Wenn du eine Liste von Datensätzen ausgeben willst, zähle mit der Programmiersprache deiner Wahl eine Variable mit, die du jeweils mit ausgibst.

Beispiel

$i = 0;
while ($dbset = mysql_fetch_array(..))
{
  $i++
  echo "$i: {$dbset['spalte']}<br>";
}

- Sven Rautenberg

--
Diese Signatur gilt nur am Freitag.