Astasor Geschrieben 28. August 2012 Geschrieben 28. August 2012 Hallo liebe Leute, ich habe ein Problem mit einer MySQL-Datenbank. Ich habe eine geschrieben in der man unter anderem etwas einfügen und löschen kann. Doch wenn ich das mache setzt sich der Index nicht zurück. Beispiel: Ich füge 3 Einträge ein, die mit dem Index: 1, 2, und 3 bezeichnet sind. Wenn ich nun den Eintrag mit Index 3 lösche und einen neuen Einfüge hat dieser den Index 4. Dann klafft da aber ne Lücke und das würde ich gerne vermeiden oder im nachhinein korrigieren. Ist das in MySQL möglich? Habe im Handbuch kein Befehl wie "Set Index" gefunden, nur einen "Create Index" um einen zu erstellen und "Drop Index" um einen zu löschen, als Unterbefehle von "Alter Table" Könnt ihr mir bitte einen Rat geben? mfg Astasor Zitieren
Thelvan Geschrieben 28. August 2012 Geschrieben 28. August 2012 Meinst du mit "Index" einen Auto increment Primary Key? Geht soweit ich weiß nicht (außer vllt. mit Truncate ), und wenn es doch geht, würde ich es trotzdem nicht tun. Der ist dazu da, um einen Datensatz eindeutig zu identifizieren, und sollte auch unter gelöschten Datensätzen eindeutig sein und nicht verändert werden. Zitieren
smite Geschrieben 28. August 2012 Geschrieben 28. August 2012 Gegenfrage: Wieso möchtest du dies tun? Damit es optisch "schöner" aussieht? Ein Index soll einen Datensatz eindeutig kennzeichnen. Sobald du den Datensatz löscht und einen neuen erstellst ist es doch beabsichtig, dass dieser einen neuen Index bekommt. Es ist ja schließlich ein "NEUER" Datensatz. Zitieren
Astasor Geschrieben 28. August 2012 Autor Geschrieben 28. August 2012 zu aller erst: Ich meinte einen Index vom Typ INT mit den Attributen PRIMARY KEY und AI Eure Antworten sind gut und so hatte ich das noch gar nicht betrachtet. Mein Gedanke war das es optisch schöner aussieht und irgendwie aufgeräumter, als wenn da so viele Lücken drin sind und das man die Indizes der gelöschten Datensätze halt wiederverwenden kann. Das man aber noch die gelöschten Datensätze eindeutig bestimmen können sollte hatte ich echt nicht bedacht xDD Aber angenommen man löscht etwas und dann ist so viel Zeit vergangen, das es keinen mehr stört. Sollte man dann nicht die Tabelle Indexmäßig wieder "herrichten"? Zitieren
Thelvan Geschrieben 28. August 2012 Geschrieben 28. August 2012 (bearbeitet) Aber angenommen man löscht etwas und dann ist so viel Zeit vergangen, das es keinen mehr stört. Sollte man dann nicht die Tabelle Indexmäßig wieder "herrichten"? Nö. Wozu? Sie soll eindeutig sein und nicht schön aussehen. Das DBMS sorgt schon dafür, dass es "aufgeräumt" ist. Die ID sollte nirgendwo außer direkt in der DB zu sehen sein. Wenn du unbedingt einen Zähler brauchst legst du dir dafür eine eigene Spalte an oder benutzt eine Komponente zum Anzeigen, die das selbst macht. Bearbeitet 28. August 2012 von Thelvan Zitieren
dbwizard Geschrieben 29. August 2012 Geschrieben 29. August 2012 Einen Primary Key wiederzuverwenden ist ein absolutes No Go. Ich möchte z.b. noch den Case erwähnen, wenn Daten in einen weitere Datenbank exportiert werden müssen (z.b. ein Datamart / Datawarehouse) und du in deiner Source DB die PK änderst stimmen deine Referenzen nicht mehr, so dass du keine ückschlüsse auf die Quelldaten mehr machen kannst. Zitieren
dbwizard Geschrieben 29. August 2012 Geschrieben 29. August 2012 @smite >>>> Ein Index soll einen Datensatz eindeutig kennzeichnen. <<<< Nur eine Präzisierung : Ein Primary Key soll einen Datensatz eindeutig kennzeichnen, ein Index kann durchaus mehrfach dieselben Werte enthalten, so er nicht als UNIQUE definiert worden ist Zitieren
flashpixx Geschrieben 29. August 2012 Geschrieben 29. August 2012 Bitte einmal die mySQL Doku lesen, da steht genau drin, dass er PKs nicht mehr verwendet, wenn sie einmal vergeben wurden. Es hat aber durchaus einen Sinn es so zu machen, denn damit bleibt die Eindeutigkeit erhalten Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.