Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment réinitialiser les numéros de séquence pour qu'ils deviennent consécutifs ?

Si le champ est votre clé primaire...

... alors, comme indiqué ailleurs sur cette question, vous ne devriez pas changer d'ID. Les identifiants sont déjà uniques et vous n'avez ni besoin ni envie de les réutiliser.

Maintenant, cela dit...

Sinon...

Il est tout à fait possible que vous ayez un différent champ (c'est-à-dire, ainsi que le PK) pour certains ordres définis par l'application. Tant que cet ordre n'est pas inhérent à un autre champ (par exemple, s'il est défini par l'utilisateur), il n'y a rien de mal à cela.

Vous pouvez recréer la table en utilisant un auto_increment (temporaire) puis supprimez le auto_increment après.

Je serais tenté de UPDATE dans l'ordre croissant et appliquer une variable d'incrémentation.

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

Cela semble assez inutile de le faire à chaque fois vous supprimez des éléments, mais malheureusement, avec cette approche de commande manuelle, vous ne pouvez pas faire grand-chose si vous souhaitez maintenir l'intégrité de la colonne.

Vous pourriez éventuellement réduire la charge, de sorte qu'après avoir supprimé l'entrée avec myOrderCol égal à, disons, 5 :

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

Cela "mélangera" toutes les valeurs suivantes vers le bas d'une unité.