MYSQL: wie "neu ordnen" eine Tabelle
Ich habe eine Tabelle wie die folgende,
| id | name | color |
------+--------+---------
| 1 | pear | green |
| 2 | apple | red |
| 3 | banana | yellow |
| 4 | grape | purple |
Möchte ich alphabetisch ordnen mit der Spalte "name" und setzen Sie die id (autoincrement) mit dieser neuen, um am Ende mit den folgenden
| id | name | color |
------+--------+---------
| 1 | apple | red |
| 2 | banana | yellow |
| 3 | grape | purple |
| 4 | pear | green |
FRAGE: wie kann ich das mit MYSQL?
Warum willst du die id, um die Namen um?
InformationsquelleAutor cardflopper | 2009-12-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Darf ich Fragen, warum würden Sie wollen, dies zu tun?
Wenn jemand geändert von name-Werte oder fügt neue Zeilen wird es mess up Ihre Bestellung Schema. Versuchen, zu speichern, d.h. in der Reihenfolge der PK ist das schon an anderer Stelle in die Tabelle (Spalte name) scheint redundant und damit eine schlechte Idee.
Eine viel bessere Lösung ist, sich nicht zu sorgen über den Wert der ID-Spalte und Sortieren auf die Spalte name, wenn Sie die Daten in Ihrer app.
PS: Sorry für die nicht-Antwort-geben Sie Antwort. Normalerweise würde ich annehmen, Sie hatten einen guten Grund und nur eine Antwort geben, die direkt anspricht, was Sie zu tun versuchen, aber ich merkte aus deinen anderen Fragen, dass Sie sich noch in der early learning Phasen über Datenbank-design, so dass ich wollte helfen, zeigen Sie in die richtige Richtung, anstatt zu helfen, weitere Fortschritte in Richtung einer unklugen Ansatz.
Das einzige mal, ich würde vorschlagen, das hinzufügen einer zusätzlichen Spalte für die Sortierung wäre, wenn die Art nicht bestimmt werden kann, die von anderen Spalten in der Tabelle. Zum Beispiel, wenn die Anwendung erlaubt Benutzer, um die Reihenfolge der Elemente beliebig.
Die Aufzeichnungen bilden einen Satz. Die sets sollen nicht bestellt werden, die in einer bestimmten Reihenfolge. Daran erinnern, dass eine relationale Datenbank Theorie basiert auf rein mathematischen Vorstellungen. Wenn Sie möchten, dass eine bestimmte Reihenfolge in der Anwendung, fügen Sie eine orderby-Klausel, sonst wird der Ausführungsplan wird entscheiden, wie Sie die Daten abrufen und damit die Bestellung; diese Pläne können im Laufe der Zeit ändern. Darüber hinaus daran erinnern, dass Ersatzschlüssel sind bedeutungslos für den Anwender.
Wenn Sie fügen Sie eine zusätzliche Spalte ein, oder halten Sie nur die id-Spalte stellen Sie sicher, fügen Sie die entsprechenden Indizes für diejenigen Spalten, sonst nach der Tabelle wird zu groß, wou werden nicht in der Lage, um die Suche effizient.
InformationsquelleAutor JohnFx
Die sauberste Möglichkeit zum zurücksetzen des auto-Inkrement ist, erstellen Sie eine andere Tabelle.
MySQL-Befehle, wie
CREATE TABLE LIKE
undRENAME TABLE
nützlich sind.eine Korrektur, müssen Sie die drop-PK aus der Tabelle 2 vor dem einfügen von "Tabelle1"; dann dont tun, wählen Sie * aus , aber alle Spalten außer ID. und es funktioniert wie Charme
InformationsquelleAutor Yada
Können Sie WÄHLEN SIE IN eine neue Tabelle aus der alten Tabelle, Bestellung, wählen Sie in, wie gewünscht. Eine auto-increment-ID in der neuen Tabelle. Falls erforderlich, löschen Sie die alte Tabelle und benennen Sie die neue Tabelle.
InformationsquelleAutor Eric J.
Warum nicht das hinzufügen von "ORDER BY name ASC" am Ende der Abfrage? Meine Vermutung wäre, dass müssen Sie die ID aus irgendeinem Grund.
InformationsquelleAutor ademers
sparen könnte, um eine temp-Tabelle, dann abschneiden, dann abschneiden, die Frucht-Tabelle und einfügen, aber es ist wahrscheinlich eine beschissene Lösungen.
diese sehr enge, aber wie kann man nun speichern Sie die NewID, id ?
InformationsquelleAutor Paul Creasey