2 messages in com.mysql.lists.mysql-deRe: id-Spalte mit auto_increment neu ...
FromSent OnAttachments
Arnold, Lutz27 Sep 2003 02:50 
Rene Fertig27 Sep 2003 03:54 
Subject:Re: id-Spalte mit auto_increment neu durchnumerieren
From:Rene Fertig (re@renux.de)
Date:09/27/2003 03:54:55 AM
List:com.mysql.lists.mysql-de

Hallo.

Am Samstag, 27. September 2003 11:50 schrieb Arnold, Lutz:

ich habe einige Spalten in MyISAM-Tabellen mit "auto_increment" durchnummeriert, weil sie auch als PRIMARY-KEY dienen und "unique" sind. Durch löschen von Datensätzen ist aber die zugeordnete Zahl ziemlich verwirrend. Nun möchte ich 1. wieder eine kompakte "Durchnumerierung" herstellen, 2. dass danach angefügte Datensätze auch wieder in die Numerierung passen. (nach dem letzten Datensatz wieder richtig weitergezählt wird)

"Kopiere" die betreffende Tabelle in eine neue, wobei du die Autoincrement-Spalte beim Select auf die alte Tabelle weg lässt und in der Neuen neu hochzählen lässt.

Aber so etwas macht man üblicherweise nicht! Auch wenn das "Durcheinander" das menschliche Auge stört, der DB isses egal. Eine Datenbank soll immer konsistent sein, und mit einer solchen Aktion gefährdest du das. Beispiel: In einer Artikel-DB ist die ID auch gleichzeitig die Artikelnummer. Nun wird der Artikel mit der Nummer 4711 aus dem Sortiment genommen. Danach wird die ID-Spalte "bereinigt" (und neue Kataloge gedruckt). Ein paar Wochen später trifft eine Bestellung für einen Artikel 4711 ein. Der Kunde hatte aber dummerweise noch einen alten Katalog und bekommt nun statt des gewünschten Produkts etwas völlig anderes. Daher: einmal eine ID gelöscht, sollte diese für immer gelöscht bleiben.

Zusatz: Wie liese sich der Vorgang durchführen, wenn über das id-Feld eine Verknüpfung mit einer anderen Tabelle realisiert wird?

Das ist nicht unmöglich, aber je nach Anzahl der verknüpften Tabellen beliebig komplex. Und Fehler dabei sind fatal. Daher lieber mit dem "Durcheinander" leben...

Wer kann mit sagen, wie das geht - leider habe ich nirgens eine brauchbare Anleitung gefunden.

Eben drum ;-)

Ciao, René

----------------------------------------------------------------------