Comment puis-je réinitialiser le AUTO_INCREMENT
champ?
Je veux qu'il recommence à compter 1
.
TRUNCATE TABLE yourTableName;
Comment puis-je réinitialiser le AUTO_INCREMENT
champ?
Je veux qu'il recommence à compter 1
.
TRUNCATE TABLE yourTableName;
Réponses:
Vous pouvez réinitialiser le compteur avec:
ALTER TABLE tablename AUTO_INCREMENT = 1
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 ):
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 ou égale à la valeur maximale actuellement dans la colonne AUTO_INCREMENT, la valeur est réinitialisée au maximum actuel plus un. Pour InnoDB, si la valeur est inférieure à la valeur maximale actuelle dans la colonne, aucune erreur ne se produit et la valeur de séquence actuelle n'est pas modifiée.
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.
circular reference
curcular reference
?
ALTER TABLE tablename AUTO_INCREMENT = 1
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Je pense que ça va le faire
UPDATE
mettra à jour toutes les valeurs dans la id
colonne.
Tout simplement comme ceci:
ALTER TABLE tablename AUTO_INCREMENT = value;
référence: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
reset
signifie le mettre à la valeur par défaut ... afin que vous puissiez remplacer "valeur" par 1
Il 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 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;
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.
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
, alors ALTER 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 :
Vous ne pouvez pas réinitialiser le compteur à une valeur inférieure ou égale à la valeur actuellement utilisée. Pour InnoDB et MyISAM, si la valeur est inférieure ou égale à la valeur maximale actuellement dans la colonne AUTO_INCREMENT, la valeur est réinitialisée à la valeur maximale actuelle de la colonne AUTO_INCREMENT plus un.
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 .
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:
ALTER TABLE tablename AUTO_INCREMENT = 1;
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.
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 InnoDB
DELETE
(ou ROLLBACK
) ne récupérera pas les identifiants. Une exception: après un redémarrage (ou un crash), l'ID suivant est calculé comme MAX(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.
ALTER TABLE news_feed DROP id
ALTER TABLE news_feed ADD id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)
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 !!!.
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 votre your_table
!!
TRUNCATE
cela supprimera également TOUTES vos lignes dans le tableau spécifié!
TRUNCATE
va également réinitialiser les auto_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 et CREATE
encore.
auto_increment
valeur actuelle , utilisez DELETE FROM
plutôt que TRUNCATE
.
c'est pour une table vide:
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
si vous avez des données mais que vous voulez les ranger, je recommande d'utiliser ceci:
ALTER TABLE `table_name` DROP `auto_colmn`;
ALTER TABLE `table_name` ADD `auto_colmn` INT( {many you want} ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`auto_colmn`);
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.
ALTER TABLE tbl_name DROP COLUMN column_id
ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST
Ça marche bien!
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;
Vous pouvez simplement tronquer le tableau pour réinitialiser la séquence
TRUNCATE TABLE TABLE_NAME
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.
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. Choisissez Options
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.
Pour mettre à jour le dernier identifiant plus un
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
ALTER TABLE nom_table AUTO_INCREMENT = 1
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 comme int
clé primairecréer une procédure stockée comme celle-ci:
DELIMITER //
CREATE PROCEDURE reset_autoincrement(IN tablename varchar(200))
BEGIN
SET @get_next_inc = CONCAT('SELECT @next_inc := max(id) + 1 FROM ',tablename,';');
PREPARE stmt FROM @get_next_inc;
EXECUTE stmt;
SELECT @next_inc AS result;
DEALLOCATE PREPARE stmt;
set @alter_statement = concat('ALTER TABLE ', tablename, ' AUTO_INCREMENT = ', @next_inc, ';');
PREPARE stmt FROM @alter_statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
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.
Cette fois, vous pouvez simplement utiliser des requêtes MySQL normales.
call reset_autoincrement('products');
À l'origine de mes propres notes de requêtes SQL dans https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc et adapté pour StackOverflow
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Essayez d'exécuter cette requête
ALTER TABLE tablename AUTO_INCREMENT = value;
Ou essayez cette requête pour réinitialiser l'incrémentation automatique
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;
Et définir l'incrémentation automatique, puis exécuter cette requête
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
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!
Le meilleur moyen est de supprimer le champ avec l'IA et de l'ajouter à nouveau avec l'IA, fonctionne pour toutes les tables