Comment puis-je réinitialiser le site AUTO_INCREMENT
d'un champ ?
Je veux qu'il commence à compter à partir de 1
encore.
Cela peut prendre une éternité pour une table remplie. Soyez prudent avec cela : stackoverflow.com/questions/2681869/
Comment puis-je réinitialiser le site AUTO_INCREMENT
d'un champ ?
Je veux qu'il commence à compter à partir de 1
encore.
Vous pouvez remettre le compteur à zéro avec :
ALTER TABLE tablename AUTO_INCREMENT = 1
Pour InnoDB, vous ne pouvez pas définir le paramètre auto_increment
inférieur ou égal à l'indice actuel le plus élevé. (citation de ViralPatel ):
Notez que vous ne pouvez pas réinitialiser le compteur à une valeur inférieure ou égale à à celles qui ont déjà été utilisées. Pour MyISAM, si la valeur est inférieure à inférieure ou égale à la valeur maximale actuellement dans la colonne AUTO_INCREMENT la valeur est réinitialisée à la valeur maximale actuelle plus un. Pour InnoDB, si la valeur est inférieure à la valeur maximale actuelle de la colonne aucune erreur ne se produit et la valeur de la séquence actuelle n'est pas modifiée.
Voir Comment réinitialiser un auto-incrément MySQL en utilisant une valeur MAX d'une autre table ? sur la façon d'obtenir dynamiquement une valeur acceptable.
Cela peut prendre une éternité pour une table remplie. Soyez prudent avec cela : stackoverflow.com/questions/2681869/
Tout simplement comme ça :
ALTER TABLE tablename AUTO_INCREMENT = value;
référence : http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
Je ne pense pas que vous ayez besoin de redémarrer votre serveur après cela. PhpAdmin va juste exécuter la commande pour changer le point de départ de l'incrémentation.
La meilleure solution qui a fonctionné pour moi :
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;
Il est rapide, fonctionne avec innoDB, et je n'ai pas besoin de connaître la valeur maximale actuelle ! De cette façon, le compteur à incrémentation automatique sera remis à zéro et il démarrera automatiquement à partir de la valeur maximale existante.
Il définira la valeur NULL auto-inc sur information_schema ; vérifier SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
J'ai testé sur la version 5.6.x et cela a parfaitement fonctionné, et la requête de Kerem Günes a retourné la valeur maximale plus un, PAS null comme indiqué. (peut-être qu'elle est définie comme nulle après la première requête, mais elle ne l'est pas après la deuxième requête) Je pense que c'est la meilleure solution pour InnoDB.
Identique à la valeur explicite : " créer une nouvelle table, avec la même structure et la nouvelle valeur d'auto_incrément et copier tous les enregistrements de la table originale, supprimer l'originale et renommer la nouvelle. Cela peut avoir un impact considérable sur les performances (et l'espace disque) dans les environnements de production si la table est grande", mais c'est bien pire car il faut copier la table deux fois.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
10 votes
Vous obtiendrez peut-être une meilleure réponse sur le site des DBA à l'adresse suivante dba.stackexchange.com
94 votes
Vous voudrez probablement vider la table aussi :
TRUNCATE TABLE yourTableName;
3 votes
Duplicata possible de MySQL : Réorganiser/Réinitialiser la clé primaire auto incrémentée ?
3 votes
Oui, tronquer la table est la meilleure solution dans ce cas. cela remet également le début de l'incrémentation automatique à 1.
2 votes
Parfois, vous n'avez pas la permission de TRUNCATE car cela nécessite des autorisations DROP.
0 votes
Un peu de nécro ici mais vous ne pouvez pas non plus tronquer une table qui a une relation de clé étrangère parent-enfant lorsque vous utilisez InnoDB, pour ceux qui arrivent tard.
0 votes
Faire
DELETE tablename
et ensuiteALTER TABLE tablename AUTO_INCREMENT = 1
est plus rapide queTRUNCATE tablename
1 votes
@cossacksman
SET foreign_key_checks = 0
et vous pouvez0 votes
Essayez ça :
DBCC CHECKIDENT('TableName', RESEED, 0)
0 votes
J'aimerais suggérer que les valeurs de votre auto-incrément ne devraient pas avoir d'importance. Vous ne devriez pas vous fier à ces valeurs, ni leur accorder une quelconque importance.
0 votes
Pour quoi faire ? Je ne vois pas le cas d'utilisation, à moins que vous ne nettoyiez/tronçonniez la table entière.
0 votes
Il y a de bonnes options données dans Comment réinitialiser une colonne d'auto-incrément MySQL Notez que
ALTER TABLE tablename AUTO_INCREMENT = value;
hace pas travail pour InnoDB