Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zresetować numery sekwencyjne, aby stały się kolejnymi?

Jeśli pole jest Twoim kluczem podstawowym...

...wtedy, jak wspomniano w innym miejscu na to pytanie, nie powinieneś zmieniać identyfikatorów. Identyfikatory są już unikalne i nie musisz ani nie chcesz ich ponownie używać.

To powiedziawszy...

W przeciwnym razie...

Całkiem możliwe, że masz inny pole (to znaczy, a także PK) dla niektórych porządków zdefiniowanych przez aplikację. Dopóki ta kolejność nie jest związana z jakimś innym polem (np. jeśli jest zdefiniowana przez użytkownika), nie ma w tym nic złego.

Możesz odtworzyć tabelę za pomocą (tymczasowego) auto_increment pole, a następnie usuń auto_increment potem.

Kusi mnie UPDATE w kolejności rosnącej i zastosuj zmienną inkrementacyjną.

SET @i = 0;
UPDATE `table`
   SET `myOrderCol` = @i:[email protected]+1
 ORDER BY `myOrderCol` ASC;

Robienie tego za każdym razem wydaje się dość marnotrawstwem usuwasz elementy, ale niestety przy takim podejściu do ręcznego zamawiania niewiele możesz z tym zrobić, jeśli chcesz zachować integralność kolumny.

Możesz ewentualnie zmniejszyć obciążenie, tak że po usunięciu wpisu za pomocą myOrderCol równe, powiedzmy, 5 :

SET @i = 5;
UPDATE `table`
   SET `myOrderCol` = @i:[email protected]+1
 WHERE `myOrderCol` > 5
 ORDER BY `myOrderCol` ASC;

Spowoduje to „przetasowanie” wszystkich poniższych wartości o jeden.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można wyświetlić wartości oddzielonych przecinkami w tabeli

  2. Grupuj wiele wyników mysql według wartości jednej kolumny

  3. Tworzenie użytkownika w MySQL

  4. Jak zrobić stronicowanie danych JSON w PHP?

  5. Zapytanie MySQL uwzględniające wielkość liter