phpbar.de logo

Mailinglisten-Archive

AW: eine kleine frage

AW: eine kleine frage

Wolfgang Hauck mysql-de_(at)_lists.bttr.org
Mon, 17 Jun 2002 10:58:04 +0200


>Hi,

>> wie kann man eine autoincremet-Tabellenspalte
>> immer auf dem tiefststand halten, (zB. wenn eine
>> Zeile gelöscht worden ist) resp gibt es dazu
>> überhaupt eine legitimierung, oder muss man da
>> selber hand anlegen?

>ich hatte das so verstanden, daß wenn Du z.B. 10 Einträge
>hast (ID 1-10) und dann die 5. löschst. Dann sollte beim
>Einfügen einer neuen Zeile die ID nicht 11 sondern 5 sein.
>Das macht ja Sinn und gibt auch kein Problem mit Referenzen.
>Nur, wie sucht man danach?

>Gruß, Reinhold

Hi Reinhold,

Ich denke es wird mal Zeit etwas grundsätzliches über Autoincrementfelder 
zu sagen. Diese werden zur eindeutigen Identifizierung eines Datensatzes 
verwendet. Bei Datenbanken wie Oracle, Ms-SQL, Jet-Modul von Access, 
Interbase etc.. ist es im Gegensatz zu mysql nicht möglich das 
Autoincrement - Feld zu ändern. Das hat auch seinen Sinn. Werden nähmlich 
die Werte dieser Felder geändert, stimmen die Referenzen nicht mehr. In 
meinen DB's sind den Anwendern diese Werte überhaupt nicht bekannt, die 
ID's die der Anwender zu sehen bekommt werden generiert und in einem 
seperaten indizierten unique Feld abgelegt. Mit den autoincrement - Feldern 
werden die Referenzen ermittelt. Es ist dabei vollkommen egal welchen Wert 
diese Felder letztendlich haben und es macht auch absolut keinen Sinn diese 
Werte zu ändern.
Wenn jetzt laufende Nummern aufgefüllt werden sollen (Buchungsnummern oder 
sowas...), habe ich bei meiner DB kein Problem. Wird ein DS gelöscht, wird 
dieser nicht aus der Tabelle entfernt, sondern als gelöscht markiert. Jetzt 
lassen sich erstens falsche Löschaufträge nochmal rückgängig machen, und 
zweitens die gelöscht markierten DS mit einer einfache Query auslesen. Mit 
einem Order richtig sortiert wird dann z. B. die niedrigste ID ermittelt, 
der alte DS mit Referenzen entgültig gelöscht und anschliessend mit dieser 
ID der neue DS angelegt. Hier muss ich in keinem Fall ein autoincrement - 
Feld geändert werden. Und wenn jetzt einer einwirft er würde soviele DS 
speichern, das ihm der autoincrement - Zähler überläuft, dann soll er sich 
vorher mal Gedanken über seine DB - Struktur machen.

MFG Wolfgang

---
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive