Tom: MySQL: Reihenfolge in einer Datenbank manuell verändern

Beitrag lesen

Hello Dirk,

Zeitstempel sind i.d.R. ungeeignet für eine saubere Sortierung, da ihre Granularität zu groß ist, bzw. wenn man sie zum Unique-Key erheben würde, keine Zeitstempel mehr wären.

Wenn also dur gleichen Sekunde 10 Datensätze in die Tabelle eintreten, müsste man bei neun davon lügen. Es hilft dann also nur z.B. ein Autoincrement-Key, der aber bei MySQL angeblich nicht garantiert hochzählt.

Wenn es nur um die Reihenfolge in der Ausgabe der Tabelle geht, dann muss der von Dir gesuchte Schlüssel auch kein Primary Key sein, obwohl er Unique sein sollte. Da dieser Schlüssel allerdings keine feste Haftung an die Daten hat, sondern mal dem einen Satz und mal dem anderen gehören kann (Man beachte die Ríchtung: Der Schlüssel gehört dem Satz, beim Primary ist es umgekehrt), hat er keinen Identifikationswert.

Zur Praxis:

Wenn nun ein Datensatz "hinten angefügt" werden soll:

  • Tabelle sperren
  • Größten Sortierschlüssel suchen
  • Datensatz mit Max+1 einfügen
  • Tabelle entsprerren

Um einen Datensatz "vor einem Satz einzufügen":

  • Tabelle sperren
  • Sortierschlüssel des betroffenen Satzes auslesen
  • alle Sortierschlüssel Schlüssel >= diesem Schlüssel um eins erhöhen [1]
  • Datensatz mit Schlüssel einfügen
  • Tabelle entsprerren

Beim Löschen entstehen ggf. Lücken. Darüber muss man sich aber be genügend großem Schlüsselvorrat keine Gedanken machen.

Vertauschen von Sätzen:

  • Tabelle sperren
  • Schlüssel der beiden Sätze auslesen
  • Schlüssel vertauscht wieder zuweisen [2]
  • Tabelle entsperren

[1] es muss darauf geachtet werden, wie die jeweilige SQL-Datenbankmaschine Ergebnismengen erzeugt.
    Wenn nämlich die Ergebnismenge dynamisch erzeugt wird, während die Veränderung stattfindet,
    kann es zu Problemen kommen, da das zu verändernde Datenfeld auch Bestandteil des Firlters ist.

[2] Wenn man sinnvollerweise eine Unique-Key auf die Schlüsselspalte gelegt hat,
    benötigt man hierfür ggf. mehrere Statements. Man muss einem der beiden Sätze
    temporär einen "neutralen Schlüssel" zuweisen, da ja doppelte nicht erlaubt sind.

Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau