Zeile aus DB löschen und ID runterzählen

Status
Nicht offen für weitere Antworten.

Antoras

Top Contributor
Hallo,

ich hab nochmal ein Problem mit meiner DB:

Ich würde gerne einzelne Zeilen aus meiner DB löschen, was auch problemlos klappt. Nur hab ich das Problem, dass, wenn die gelöschte Zeile nicht die Letzte war, nun eine leere ID existiert. Beim nächsten Anlegen einer Zeile wird die ID ganz normal hochgezählt.
Wie mach ich das am besten, dass beim Löschen alle IDs, die größer als die gelöschte ID sind, um eins runtergezählt werden?

Ach ja: Ich verwende das DBMS H2.
 

DocRandom

Top Contributor
Moin!

Wenn Du ne fortlaufende ID brauchst, mußt Du Dir einen ID-Pool schaffen.
Sprich eine Tabelle in der Du die zu vergebenden ID´s speicherst und im Fall einer Dupellöschung die ID dorthin rettest.

lg
 

Antoras

Top Contributor
Aber dann hab ich ja immer noch das Problem, dass die bestehenden IDs nicht runtergezählt werden. Außerdem werden neue Einträge dann nicht am Ende der Tabelle, sondern wieder am Platz der gelöschten ID angelegt.
 

musiKk

Top Contributor
Naja, sowas wie
Code:
UPDATE tabelle t SET t.id = t.id + 1 WHERE id > letzte_geloeschte_id
oder so. Dauert bei größeren Tabellen u. U. natürlich.
Die Frage ist nur: Wozu brauchst Du das? Eine ID identifiziert ein Tupel eindeutig, die sollte sich eigentlich nie ändern (müssen).
 

Antoras

Top Contributor
Stimmt, wenn ich so weiter denke, dann würde es schon noch ein paar Probleme geben eine ID nachträglich zu ändern. Hab nur gedacht, dass wenn mal viele Daten gelöscht werden, ich in einer großen Tabelle sehr viele unverbrauchte IDs besitzen würde.

Nochmal zu diesem ID-Pool: Dieser würde mir bei diesem Problem Abhilfe schaffen, indem neue Einträge einfach an die Stelle von gelöschten IDs gesetzt werden, sehe ich das richtig?
 

musiKk

Top Contributor
Das mit den unverbrauchten IDs stimmt natürlich. Aber i. d. R. hat man da einen Datentyp, der genug Werte zulässt, z. B. Ganzzahlen mit 32 oder 64 Bit. Vor allem letzteres kann man niemals erschöpfen, wenn man immer sequentiell hochzählt. Von diesem Standpunkt ist es völlig egal, wieviele Lücken es gibt. Und IDs werden meistens ja auch nur von den Systemen intern verwendet.
 

Antoras

Top Contributor
Also würdest du (ihr) mir nicht empfehlen auf so einen ID-Pool zurückzugreifen, sondern die IDs einfach ganz normal hochzuzählen und die Lücken in Kauf zu nehmen bzw. nicht beachten?
 

tfa

Top Contributor
Wo soll den ein Problem mit Lücken sein? Die ID bezeichnet eindeutig ein Objekt (bzw. DB-Eintrag). Mehr nicht.
Ich gehe davon aus, diese ID ist der Primärschlüssel in der DB und hat keine weitere Bedeutung in der Anwendung.
Wenn du daran rumspielst, bekommst du sicherlich erst Probleme.
 

Antoras

Top Contributor
Die ID ist mein PS, ja. Dieser wird aber noch in anderen Tabellen benötigt - von dem her würde es wirklich Probleme verursachen ihn zu ändern.
Ok, ihr habt mich überzeugt. Ich lass die Lücken einfach in der DB drin.

Danke für eure Antworten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
G Oracle Zeile löschen Datenbankprogrammierung 2
C SQL String zwei Tabellen vergleichen und gleiche Zeile löschen Datenbankprogrammierung 25
F Löschen einer Zeile Datenbankprogrammierung 4
G MySQL Zeile löschen und gleich Optimieren Datenbankprogrammierung 6
Kirby.exe Zeile aus der Datenbank holen wenn ein match besteht Datenbankprogrammierung 7
J Sql Anfrage nach einer Zeile beenden Datenbankprogrammierung 6
F UPDATE - Befehl nur in einer Zeile Datenbankprogrammierung 11
D Komplette Zeile lesen und einem Konstruktor übergeben. Datenbankprogrammierung 3
L Neue Zeile in DB anlegen Datenbankprogrammierung 3
M Derby/JavaDB Speicherplatz einer Zeile bestimmen Datenbankprogrammierung 0
H Update ganze zeile Datenbankprogrammierung 4
M DB: Mehrere Zeilen in einer Zeile zusammenführen Datenbankprogrammierung 10
W bestimmte Zeile mit bestimmter Spalte auslesen Datenbankprogrammierung 11
T mysql create zeile get autoincrementid Datenbankprogrammierung 2
E [SQL, Oracle] Zeile einfügen Datenbankprogrammierung 8
A Eine einzelne Zeile schreibschützen im DataSet Datenbankprogrammierung 13
E Wie bekomme ich die Daten von der letzten Zeile Datenbankprogrammierung 8
K ResultSet: Erste Zeile ausgeben, Datensatz in String speiche Datenbankprogrammierung 13
D Tabelle eine Zeile einfügen. Datenbankprogrammierung 3
D Zufällige Zeile auslesen Datenbankprogrammierung 6
S gesamte Tabelle löschen Datenbankprogrammierung 2
F SQLite Datensatz löschen Datenbankprogrammierung 13
R PostgreSQL JPA - Löschen und orphanRemoval Datenbankprogrammierung 6
B Mit Button einen Datensatz löschen Datenbankprogrammierung 2
B Fortlaufende Nummer - Was tun bei löschen? Datenbankprogrammierung 6
R eclipselink - referenzierte Entity löschen Datenbankprogrammierung 0
P Indizes / Fremdschlüssel löschen Datenbankprogrammierung 2
H Oracle Aus Datenbank löschen Datenbankprogrammierung 6
P Mit Hibernate mehrere Datensätze löschen Datenbankprogrammierung 7
A Ausgewählten Jtable Eintrag aus Db löschen Datenbankprogrammierung 9
reibi Derby/JavaDB Derby DB löschen Datenbankprogrammierung 5
P JPA- Entities bleiben nach dem Löschen (unsichtbar?) in der Datenbank Datenbankprogrammierung 6
J Datensätze löschen Datenbankprogrammierung 6
O Löschen vieler Datensätze mit Hibernate Datenbankprogrammierung 11
C Hibernate Datensatz löschen Datenbankprogrammierung 2
U Nur den ersten Datensatz löschen wenn mehrere gleiche da sind Datenbankprogrammierung 2
M Datenbankeintrag bleibt nach Löschen in JSP vorhanden Datenbankprogrammierung 8
D Mit Trigger Tupel löschen verhindern Datenbankprogrammierung 3
L MySQL Einträge löschen schlägt fehl Datenbankprogrammierung 2
F hibernate_seqeunce reseten (löschen) Datenbankprogrammierung 2
J MySQL Löschen von Rows mit JDBC Datenbankprogrammierung 9
M HSQLDB 2.0 - wie tmp-Verzeichnis löschen Datenbankprogrammierung 2
turmaline [Hibernate] @OneToOne: Löschen einer referenzierten Instanz Datenbankprogrammierung 2
Java.getSkill() Datensatz / Tupel automatisch nach xy Tagen / Stunden löschen Datenbankprogrammierung 7
D SQL : Objekte individuell löschen können Datenbankprogrammierung 5
R JPA, Spring, löschen einer Entity Datenbankprogrammierung 2
H MySQL Einträge löschen Datenbankprogrammierung 5
M Datensatz aus Datenbank löschen Datenbankprogrammierung 6
C Objekte aus Datenbank löschen Datenbankprogrammierung 6
G Mit Java-Programm Datenbank löschen/neu anlegen Datenbankprogrammierung 5
G Löschen eines Eintrages verbunden mit JList Datenbankprogrammierung 5
E SQL-Frage (Löschen aller Datensätze) Datenbankprogrammierung 9
P Tabellen löschen Datenbankprogrammierung 4
O Size ResultSet betrachtete Zeilen "löschen" Datenbankprogrammierung 5
T [jdbc] einen Eintrag aus mehreren Tabellen löschen (Batch) Datenbankprogrammierung 3
G mySQL: kaskadierendes Löschen Datenbankprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben