J'ai une table MySQL avec une clé primaire à incrémentation automatique. J'ai supprimé quelques lignes au milieu du tableau. Maintenant, j'ai, par exemple, quelque chose comme ça dans la colonne ID: 12, 13, 14, 19, 20. J'ai supprimé les 15, 16, 17 et 18 lignes.
Je veux réattribuer / réinitialiser / réorganiser la clé primaire pour avoir la continuité, c'est-à-dire faire le 19 a 15, le 20 a 16, et ainsi de suite.
Comment puis-je le faire?
Même si cette question semble assez ancienne, affichera une réponse pour quelqu'un qui cherche ici.
Si la colonne est utilisée comme clé étrangère dans d'autres tables, assurez-vous d'utiliser à la
ON UPDATE CASCADE
place de la valeurON UPDATE NO ACTION
par défaut pour la relation de clé étrangère dans ces tables.En outre, pour réinitialiser le
AUTO_INCREMENT
décompte, vous pouvez immédiatement émettre l'instruction suivante.Pour MySQL, la valeur sera réinitialisée
MAX(id) + 1
.la source
.
user id` = @count: = @count + 1`. De la documentation: "La valeur sur le côté droit peut être une valeur littérale, une autre variable stockant une valeur, ou toute expression légale qui donne une valeur scalaire"Pour réinitialiser les ID de ma table User, j'utilise la requête SQL suivante. Il a été dit ci-dessus que cela ruinerait toutes les relations que vous pourriez avoir avec d'autres tables.
la source
Vous pouvez simplement utiliser cette requête
la source
Je pense que ça va le faire
la source
Ou, depuis PhpMyAdmin, supprimez l'indicateur "AutoIncrement", enregistrez-le, réglez-le à nouveau et enregistrez-le. Cela le réinitialise.
la source
si tu veux
order by
la source
en phpmyadmin
aller à votre table-> cliquer sur le menu des opérations-> aller aux options de la table-> changer AUTO_INCREMENT en ce no d'où vous voulez commencer.
l'auto-incrémentation de votre table part de ce non.
essayez-le.
la source
Vous pouvez supprimer la fonctionnalité d'incrémentation automatique de clé primaire de cette colonne, puis chaque fois que vous mettez à jour cette colonne, exécutez une requête qui comptera toutes les lignes de la table, puis exécutez une boucle qui itère à travers ce nombre de lignes en insérant chaque valeur dans le ligne respective, et enfin exécutez une requête insérant une nouvelle ligne avec la valeur de cette colonne étant le nombre total de lignes plus un. Cela fonctionnera parfaitement et c'est la solution la plus absolue pour quelqu'un qui essaie d'accomplir ce que vous êtes. Voici un exemple de code que vous pouvez utiliser pour la fonction:
Ici, j'ai créé un tableau associatif que j'avais ajouté sur une colonne de rang avec la requête dans une requête de sélection, qui donnait à chaque ligne une valeur de rang commençant par 1. J'ai ensuite itéré à travers le tableau associatif.
Une autre option aurait été d'obtenir le nombre de lignes, d'exécuter une requête de sélection de base, d'obtenir le tableau associatif et de l'itérer de la même manière, mais avec une variable supplémentaire qui se met à jour à chaque itération. Ceci est moins flexible mais accomplira la même chose.
la source
pour InnoDB, faites ceci (cela supprimera tous les enregistrements d'une table, créera d'abord une bakcup):
la source
J'avais les mêmes doutes, mais je n'ai pas pu apporter de modifications sur la table, j'ai décidé de faire ce qui suit en voyant mon identifiant ne pas dépasser le nombre maximum défini dans la variable @count:
La solution prend, mais c'est sûr et c'était nécessaire car ma table possédait des clés étrangères avec des données dans une autre table.
la source
Le meilleur choix est de modifier la colonne et de supprimer l'attribut auto_increment. Puis émettez une autre instruction alter et remettez auto_increment sur la colonne. Cela réinitialisera le nombre au maximum + 1 des lignes actuelles et conservera ainsi les références de clé étrangère à cette table, à partir d'autres tables de votre base de données ou à toute autre utilisation de clé pour cette colonne.
la source
Mon avis est de créer une nouvelle colonne appelée row_order. puis réorganisez cette colonne. Je n'accepte pas les modifications apportées à la clé primaire. À titre d'exemple, si la colonne de commande est banner_position, j'ai fait quelque chose comme ceci, c'est pour supprimer, mettre à jour, créer la colonne de position de bannière. Appelez cette fonction pour les réorganiser respectivement.
la source
Cela fonctionne - https : //stackoverflow.com/a/5437720/10219008..... mais si vous rencontrez un problème 'Code d'erreur: 1265. Données tronquées pour la colonne' id 'à la ligne 1' ... Puis exécutez le suivant. Ajout d'ignorer sur la requête de mise à jour.
la source
Vous pouvez également simplement éviter d'utiliser des identifiants numériques comme clé primaire. Vous pouvez utiliser les codes de pays comme identifiant principal si le tableau contient des informations sur les pays, ou vous pouvez utiliser des permaliens, s'il contient des articles par exemple.
Vous pouvez également simplement utiliser une valeur aléatoire ou MD5. Toutes ces options ont leurs propres avantages, en particulier sur le secteur informatique. Les identifiants numériques sont faciles à énumérer.
la source