Comment puis-je réinitialiser le AUTO_INCREMENT
champ?
Je veux qu'il recommence à compter 1
.
mysql
sql
auto-increment
Home Run
la source
la source
TRUNCATE TABLE yourTableName;
Réponses:
Vous pouvez réinitialiser le compteur avec:
Pour InnoDB, vous ne pouvez pas définir une
auto_increment
valeur inférieure ou égale à l'indice de courant le plus élevé. (citation de ViralPatel ):Voir Comment réinitialiser une incrémentation automatique MySQL en utilisant une valeur MAX d'une autre table? sur la façon d'obtenir dynamiquement une valeur acceptable.
la source
circular reference
curcular reference
?la source
Je pense que ça va le faire
la source
UPDATE
mettra à jour toutes les valeurs dans laid
colonne.Tout simplement comme ceci:
référence: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
la source
reset
signifie le mettre à la valeur par défaut ... afin que vous puissiez remplacer "valeur" par 1Il existe un moyen très simple avec phpmyadmin sous l'onglet "opérations", vous pouvez définir, dans les options du tableau, l'auto-incrémentation du nombre que vous souhaitez.
la source
La meilleure solution qui a fonctionné pour moi:
Son rapide, fonctionne avec innoDB, et je n'ai pas besoin de connaître la valeur maximale actuelle! De cette façon, le compteur d'incrémentation automatique sera réinitialisé et il démarrera automatiquement à partir de la valeur maximale existante.
la source
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
, alorsALTER TABLE tablename AUTO_INCREMENT = 1
que non .Les réponses les mieux notées à cette question recommandent toutes "ALTER yourtable AUTO_INCREMENT = value". Cependant, cela ne fonctionne que lorsque
value
l'alter est supérieur à la valeur maximale actuelle de la colonne d'auto-incrémentation. Selon la documentation MySQL 8 :En substance, vous ne pouvez modifier AUTO_INCREMENT que pour augmenter la valeur de la colonne d'auto-incrémentation, pas la remettre à 1, comme l'OP le demande dans la deuxième partie de la question. Pour les options qui vous permettent de définir l'AUTO_INCREMENT vers le bas à partir de son maximum actuel, jetez un œil à Réorganiser / réinitialiser la clé primaire d'incrémentation automatique .
la source
Ajout d'une mise à jour car la fonctionnalité a changé dans MySQL 5.6. Depuis MySQL 5.6, vous POUVEZ utiliser le simple ALTER TABLE avec InnoDB:
Les documents sont mis à jour pour refléter ceci:
http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
Mes tests montrent également que la table n'est PAS copiée, la valeur est simplement modifiée.
la source
De bonnes options sont données dans Comment réinitialiser la colonne d'auto-incrémentation MySQL
Notez que
ALTER TABLE tablename AUTO_INCREMENT = value;
cela ne fonctionne pas pour InnoDBla source
DELETE
(ouROLLBACK
) ne récupérera pas les identifiants. Une exception: après un redémarrage (ou un crash), l'ID suivant est calculé commeMAX(id)+1
tel, récupérant ainsi efficacement les ID supprimés à la fin . Exception à l'exception: MySQL 8.0 laisse ces identifiants inutilisés.J'ai utilisé cela dans certains de mes scripts, le champ id est supprimé puis ajouté avec les paramètres précédents, tous les champs existants dans la table de base de données sont remplis avec de nouvelles valeurs d'incrémentation automatique, cela devrait également fonctionner avec InnoDB.
Notez que tous les champs de la table seront recomptés et auront d'autres identifiants !!!.
la source
Vous pouvez également utiliser le
TRUNCATE
tableau de syntaxe comme ceci:TRUNCATE TABLE table_name
IL FAUT SE MÉFIER!!
TRUNCATE TABLE your_table
va supprimer tout dans votreyour_table
!!la source
TRUNCATE
cela supprimera également TOUTES vos lignes dans le tableau spécifié!TRUNCATE
va également réinitialiser lesauto_increment
champs? Mon cas d'utilisation est d'effacer les anciennes données du tableau et de recommencer les ID à partir de 1 pour les nouvelles données (imaginez, effacer le tableau pour une utilisation correcte une fois le test terminé). Je pensais que je devrais àDROP
la table entière etCREATE
encore.auto_increment
valeur actuelle , utilisezDELETE FROM
plutôt queTRUNCATE
.c'est pour une table vide:
si vous avez des données mais que vous voulez les ranger, je recommande d'utiliser ceci:
la source
Voici ma solution, mais je ne conseillerai pas de le faire si votre colonne a des contraintes ou est connectée en tant que clé étrangère à d'autres tables car cela aurait de mauvais effets ou ne fonctionnerait même pas.
> Premièrement: déposez la colonne
> Deuxièmement: recréez la colonne et définissez-la comme PREMIÈRE si vous la souhaitez comme première colonne, je suppose.
Ça marche bien!
la source
Depuis MySQL 5.6, l'approche ci-dessous fonctionne plus rapidement en raison de la DDL en ligne (remarque
algorithm=inplace
):alter table tablename auto_increment=1, algorithm=inplace;
la source
Vous pouvez simplement tronquer le tableau pour réinitialiser la séquence
la source
J'ai essayé de modifier la table et de mettre auto_increment à 1 mais cela n'a pas fonctionné. J'ai résolu de supprimer le nom de la colonne que j'incrémentais, puis de créer une nouvelle colonne avec votre nom préféré et de définir cette nouvelle colonne pour qu'elle s'incrémente dès le début.
la source
Le compteur d'incrémentation automatique d'une table peut être (re) défini de deux manières:
En exécutant une requête, comme d'autres l'ont déjà expliqué:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
Utilisation de Workbench ou d'un autre outil de conception de base de données visuelle. Je vais montrer dans Workbench comment cela se fait - mais cela ne devrait pas être très différent dans les autres outils également. En faisant un clic droit sur la table souhaitée et en choisissant
Alter table
dans le menu contextuel. En bas, vous pouvez voir toutes les options disponibles pour modifier une table. ChoisissezOptions
et vous obtiendrez ce formulaire:Ensuite, définissez simplement la valeur souhaitée dans le champ,
Auto increment
comme indiqué dans l'image. Cela exécutera essentiellement la requête indiquée dans la première option.la source
Pour mettre à jour le dernier identifiant plus un
la source
ALTER TABLE nom_table AUTO_INCREMENT = 1
la source
J'ai googlé et trouvé cette question, mais la réponse que je cherche vraiment remplit deux critères:
Comme je n'ai pas pu trouver exactement ce que je veux ici, j'ai bricolé la réponse à partir de diverses réponses et je l'ai partagée ici.
Peu de choses à noter:
id
avec le type commeint
clé primaireÉtape 1: créer une procédure stockée
créer une procédure stockée comme celle-ci:
Ensuite, lancez-le.
Avant l'exécution, cela ressemble à ceci lorsque vous regardez sous Procédures stockées dans votre base de données.
Lorsque j'exécute, je sélectionne simplement la procédure stockée et j'appuie sur Exécuter la sélection
Remarque: la partie délimiteurs est cruciale. Par conséquent, si vous copiez et collez à partir des meilleures réponses sélectionnées dans cette question, elles ont tendance à ne pas fonctionner pour cette raison.
Après avoir exécuté, je devrais voir la procédure stockée
Si vous devez modifier la procédure stockée, vous devez supprimer la procédure stockée, puis sélectionnez pour réexécuter.
Étape 2: appelez la procédure stockée
Cette fois, vous pouvez simplement utiliser des requêtes MySQL normales.
À l'origine de mes propres notes de requêtes SQL dans https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc et adapté pour StackOverflow
la source
la source
Essayez d'exécuter cette requête
Ou essayez cette requête pour réinitialiser l'incrémentation automatique
Et définir l'incrémentation automatique, puis exécuter cette requête
la source
Je vous suggère d'aller dans le navigateur de requêtes et de faire ce qui suit:
Auto_increment doit être réinitialisé à un une fois que vous entrez une nouvelle ligne dans le tableau.
Je ne sais pas ce qui se passera si vous essayez d'ajouter une ligne où une valeur de champ auto_increment existe déjà.
J'espère que cette aide!
la source
Le meilleur moyen est de supprimer le champ avec l'IA et de l'ajouter à nouveau avec l'IA, fonctionne pour toutes les tables
la source