Musiałem zrobić coś podobnego. Najlepszym sposobem, aby to zrobić był następujący (można go uruchomić w jednym zapytaniu SQL, jeśli chcesz, ale miej na uwadze, że jest to zasób czasochłonne działanie powolne i bardzo):
aby upewnić A BACKUP TWOJEGO TABELI, W TYM STRUKTURA I DANE PRZED ROZPOCZĘCIEM TEGO ZADANIA!
ALTER TABLE your_table ADD COLUMN temp_id INT UNSIGNED NOT NULL;
SET @a:=0;
UPDATE your_table SET [email protected]:[email protected]+1 ORDER BY `date` ASC;
ALTER TABLE your_table DROP id;
ALTER TABLE your_table CHANGE temp_id id INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id);
ALTER TABLE your_table CHANGE COLUMN id id INT(10) FIRST;
Tylko nie zapomnij zmienić „your_table” z nazwą tabeli, a kolejność kolumn. Tu wyjaśnię ci, co robisz ten sposób krok po kroku:
- Najpierw trzeba dodać nową kolumnę o nazwie „temp_id” (upewnić się, że nie jest to nazwa używasz już);
- Następnie dodajemy zmienną tymczasową równą 0 (lub dowolne, czego chcemy, aby identyfikator zaczynał się od);
- Następnie aktualizujesz tabelę, wiersz po wierszu według ustawionej logiki ZAMÓWIENIA, ustawiając wartość dla nowej kolumny "temp_id" równą ustawionej zmiennej, a następnie zwiększ tę zmienną o 1 (możesz zrobić coś ciekawego tutaj, na przykład, jeśli chcesz, aby twoje identyfikatory były zawsze równe, możesz ustawić @ a + 2);
- Kolejny krok upuścisz (usuniesz) swój stary identyfikator kolumny;
- Następnie zmieniasz nazwę swojej kolumny temp_id z powrotem na ID, a jako dodatnią liczbę całkowitą z automatycznym inkrementowaniem, który jest kluczem podstawowym twojej tabeli.
- Ponieważ ID jest teraz nowo dodaną kolumną temp_id, znajduje się na końcu struktury tabeli. Aby przenieść go ponownie jako pierwszą kolumnę, uruchom ostatnie zapytanie, aby upewnić się, że jest to pierwsza kolumna.
Oczekiwanie, że wiersze są * przechowywane * w określonej kolejności w dowolnej relacyjnej bazie danych, prawdopodobnie nie jest dobrym pomysłem. Do tego służą indeksy i ORDER BY. Identyfikatory to tylko identyfikatory; jeśli ważny jest według daty/czasu, kogo obchodzą identyfikatory? – Joe