sql >> Databáze >  >> RDS >> Mysql

Jak resetuji pořadová čísla, aby se stala po sobě jdoucí?

Pokud je pole vaším primárním klíčem...

...pak, jak je uvedeno jinde v této otázce, neměli byste měnit ID. ID jsou již jedinečná a nemusíte je ani nechcete znovu používat.

To znamená...

Jinak...

Je docela možné, že to máte jiné pole (tedy stejně jako PK) pro nějaké aplikačně definované řazení. Pokud toto řazení není vlastní nějakému jinému poli (např. pokud je definováno uživatelem), není na tom nic špatného.

Tabulku můžete znovu vytvořit pomocí (dočasného) auto_increment a poté odstraňte auto_increment poté.

Byl bych v pokušení UPDATE ve vzestupném pořadí a použijte zvyšující se proměnnou.

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

Dělat to pokaždé se zdá docela zbytečné odstraníte položky, ale bohužel s tímto přístupem ručního řazení s tím nemůžete mnoho udělat, pokud chcete zachovat integritu sloupce.

Mohli byste případně snížit zatížení tak, že po smazání položky pomocí myOrderCol rovná se, řekněme, 5 :

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

To „zamíchá“ všechny následující hodnoty o jednu dolů.



  1. Funkce LOG() v Oracle

  2. Jak vytvořit kontrolní omezení pro více sloupců na SQL Server - SQL Server / TSQL výukový program, část 84

  3. Získejte předchozí a další řádek z řádků vybraných s podmínkami (WHERE).

  4. Jak nainstalovat PostgreSQL na macOS