2012-04-20 10 views
12

Ich habe eine Tabelle in MySQL, die eine Primärschlüsselspalte hat.Abfrage, um Primärschlüssel der MySQL-Datenbank neu zu indizieren

Lassen Sie uns sagen:

ID | Value 
1 | One 
2 | Two 
6 | Three 
8 | Four 
9 | Five 

Wie kann ich es sein erhalten:

ID | Value 
1 | One 
2 | Two 
3 | Three 
4 | Four 
5 | Five 

Es gibt keine anderen Tabellen. Nur der eine. Ich möchte nur die ID in einer richtigen Reihe sein.

Irgendwelche Vorschläge ?? Eine Abfrage vielleicht .. :)

+0

ich über Bestellung wissen indizieren. Das ist nicht, was ich will .. Ich möchte die ID in einer perfekten Reihenfolge sein ... – LearningDeveloper

Antwort

30

Es gibt sogar eine einfache Möglichkeit, das Ergebnis durch das Schreiben dieser Abfrage

SET @newid=0; 
UPDATE tablename SET primary_key_id=(@newid:[email protected]+1) ORDER BY primary_key_id; 

Diese Abfrage zu erreichen wird der Primärschlüssel beginnt von 1

+6

Dies sollte die angenommene Antwort sein –

+1

Changed meine Antwort, habe dies nicht versucht. – LearningDeveloper

+0

Diese Lösung ist großartig, aber bitte beachten Sie die Beziehung zu anderen Tabellen, die auf diesem Feld basieren, die Sie wiederholen! Wenn Sie Einschränkungen mit der update-Klausel in den anderen Tabellen haben, ist es in Ordnung, wenn nicht, sollten Sie die ID auch in den anderen Tabellen aktualisieren;) – qdev

9

Scheint mir, Sie haben zwei Möglichkeiten.

1) Erstellen Sie eine neue Tabelle und kopieren Sie die vorhandenen Daten über.

2) Fügen Sie der vorhandenen Tabelle ein weiteres Autoinkrement-Feld hinzu, und löschen Sie dann die ursprüngliche Spalte.

ALTER TABLE tableName ADD NewIdn INT NOT NULL AUTO_INCREMENT KEY 
+3

Funktioniert gut .. Danke für die Lösung "DBaseman" .. :) Hatte die ID-Spalte zuerst aber wie es tat fallen lassen Mit AUTO_INCREMENT zwei Spalten nicht zulassen. \t "ALTER TABLE" Test "DROP COLUMN' ID' " – LearningDeveloper

0

Ich tat dies in phpMyAdmin durch die A_I Box (Auto Increment Einstellung) Abhaken speichern klicken und es dann erneut überprüft und wieder klicken speichern.