Problem mit SQL Tabellen abfrage
-
Hallo,
ich habe folgendes Problem. Ich habe eine Tabelle mit
CREATE TABLE tabelle ID INT AUTO_INCREMENT,
Vorname CHAR(20),
primary key (ID)Wenn ich jetzt Datensätze erzeuge, werden sie auch immer mit einer neuen Zahl erzugt, wenn ich jetzt aber einen Datensatz lösche, wird ja nicht neu durchnummeriert und darin liegt mein Problem.
Ich habe also z.B. 10 Datensätze und lösche den 8. Datensatz, wie lese ich jetzt den neuen 8. Datensatz ein(also den mit der Nummer 9, aber die Nummer habe ich ja nicht), oder muss ich meine Tabelle irgendwie anders erzeugen?Vielen Dank schon mal im vorraus
Sebastian
-
Darin liegt ja gerade der Sinn eines AUTO_INCREMENT. Stell Dir mal vor, in einer Artikeltabelle gibt's einen Artikel mit der Nummer 4711. Jetzt wird dieser Artikel gelöscht und ein anderer Artikel bekommt genau diese Nummer 4711. Du hast dann vielleicht noch den alten Bestellkatalog zu Hause und bestellst diesen Artikel.
Was wäre Dir lieber - Eine Meldung, dass der bestellte Artikel nicht mehr lieferbar ist, oder ein (vielleicht viel teurer Artikel) den Du gar nicht wolltest.
Wenn Du aber 'lückenlose' Nummern brauchst, dann kannst Du Dir vielleicht ein Skript schreiben (Perl, PHP) und neue Nummern vergeben ....
-
Das stimmt schon, aber mein Problem ist, dass ich eine Software unter Java Schreibe, mit der ich Mitglieder eines Vereins verwalte. Wenn ich einenen meiner 10 Datensätze ansehen möchte, mache ich das mit
SELECT * from tabelle WHERE ID LIKE datensatznummer
wenn ich jetzt aber z.B. den Datensatz mit einer bestimmten ID lösche z.B. ID=4 und dann durch meine Karteikarten blättere möchte ich halt nicht, das bei ID=4 die Fehlermeldung Datensatz nicht vorhanden kommt, sodern der nächste folgende Datensatz.
Ich dachte, das ich mit
"SELECT COUNT(*) FROM tabelle" die Anzahl der Datensätze ermittel, und dann mit einer SELECT Anweisung eine bestimmte Zeile auslesen Kann.
Oder das die Spalte ID jedesmal, wenn ein Datensatz gelöscht wird, neu durchnummeriert wird, aber das ist vermutlich ein wenig zu CPU lastig.Sebastian
-
So funktionieren Datenbanken nicht. Wenn du sowas willst, solltest du DBase oder was ähnliches nehmen, da kannst du jeden Datensatz direkt anspringen.
SQL ist eine Mengenorientierte Abfragesprache, keine Datensatzbasierte. Darum sind dort keine Datensatz-Nummern vorgesehen, und das ist genau das was du haben willst. Nix desto trotz kannst du dir sowas selbst bauen, wenn du darauf bestehst, z.B. mit einem Trigger auf insert und delete, der dir dafür sorgt, das die Datensätze immer lückenlos durchnummeriert sind. Trigger sind aber Datenbankabhängig.