Mysql
 sql >> Database >  >> RDS >> Mysql

Come reimpostare i numeri di sequenza in modo che diventino consecutivi?

Se il campo è la tua chiave primaria...

... quindi, come affermato altrove su questa domanda, non dovresti modificare gli ID. Gli ID sono già univoci e non devi né vuoi riutilizzarli.

Detto questo...

Altrimenti...

È possibile che tu abbia un diverso campo (ovvero, oltre al PK) per alcuni ordini definiti dall'applicazione. Finché questo ordinamento non è inerente a qualche altro campo (ad esempio se è definito dall'utente), non c'è niente di sbagliato in questo.

Puoi ricreare la tabella usando un auto_increment (temporaneo). campo e quindi rimuovere il auto_increment dopo.

Sarei tentato di UPDATE in ordine crescente e applica una variabile incrementale.

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

Sembra piuttosto dispendioso farlo ogni volta elimini gli elementi, ma sfortunatamente con questo approccio di ordinamento manuale non c'è molto che puoi fare al riguardo se vuoi mantenere l'integrità della colonna.

Potresti eventualmente ridurre il carico, in modo tale che dopo aver eliminato la voce con myOrderCol uguale, diciamo, a 5 :

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

Questo "mescolerà" tutti i seguenti valori verso il basso di uno.