web-dev-qa-db-fra.com

Comment réinitialiser AUTO_INCREMENT dans MySQL?

Comment puis-je réinitialiser le AUTO_INCREMENT d'un champ? Je veux qu'il recommence à compter à partir de 1.

1132
some Folk

Vous pouvez réinitialiser le compteur avec:

ALTER TABLE tablename AUTO_INCREMENT = 1

Pour InnoDB, vous ne pouvez pas définir la valeur auto_increment inférieure ou égale à l'index actuel le plus élevé. (citation de ViralPatel ):

Notez que vous ne pouvez pas réinitialiser le compteur à une valeur inférieure ou égale à celle déjà utilisée. 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 la séquence actuelle n'est pas modifiée.

Voir Comment réinitialiser une auto-incrémentation MySQL en utilisant une valeur MAX d'une autre table? pour obtenir de manière dynamique une valeur acceptable.

1851
Niels
ALTER TABLE tablename AUTO_INCREMENT = 1
145
boobiq
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

68
nghiepit

Simplement comme ça:

ALTER TABLE tablename AUTO_INCREMENT = value;

référence: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

54
fyr

enter image description hereIl existe un moyen très simple d'utiliser phpmyadmin sous l'onglet "Opérations". Vous pouvez définir, dans les options du tableau, l'auto-incrémentation du nombre souhaité.

38
Miles M.

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;

C'est 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 démarrera automatiquement à partir de la valeur maximale existante.

32
trust_words

Les réponses les mieux notées à cette question recommandent toutes "ALTER yourtable AUTO_INCREMENT = value". Toutefois, cela ne fonctionne que lorsque value dans l’alter est supérieur à la valeur maximale actuelle de la colonne auto-incrémentée. Selon la documentation de MySQL 8 :

Vous ne pouvez pas réinitialiser le compteur à une valeur inférieure ou égale à la valeur en cours d'utilisation. 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 pouvez uniquement modifier AUTO_INCREMENT pour augmenter la valeur de la colonne auto-incrémentation, et non la réinitialiser à 1, comme l'OP le demande dans la deuxième partie de la question. Pour les options qui vous permettent réellement de régler AUTO_INCREMENT à partir de son maximum actuel, consultez Réordonner/réinitialiser la clé primaire avec incrémentation automatique .

19
lreeder

Il y a de bonnes options données dans Comment réinitialiser la colonne MySQL Autoincrement Column

Notez que ALTER TABLE tablename AUTO_INCREMENT = value; ne fonctionne pas pour pour InnoDB.

19
Naz

Ajouter une mise à jour car la fonctionnalité a été modifiée 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.

18
SeanN
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 rajouté 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 !!!.

12
Alin Razvan

Vous pouvez également utiliser la syntaxe TRUNCATE table comme ceci: TRUNCATE TABLE table_name

ATTENTION! TRUNCATE TABLE your_table volonté tout effacer dans votre your_table !!

11
Manohar Kumar

c'est pour la table vide:

ALTER TABLE `table_name` AUTO_INCREMENT = 1;

si vous avez des données mais que vous voulez les ranger, je vous 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`);
6

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 des effets néfastes ou ne fonctionnerait même pas.

> D'abord: déposer la colonne

ALTER TABLE tbl_name DROP COLUMN column_id

> Deuxièmement: recréez la colonne et définissez-la en tant que PREMIER si vous la souhaitez comme première colonne, je suppose.

ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST

Ça marche bien!

4
bdalina

Vous pouvez simplement tronquer la table pour réinitialiser la séquence

TRUNCATE TABLE TABLE_NAME
1
Kunwar Babu

J'ai essayé de modifier la table et de définir auto_increment sur 1, mais cela n'a pas fonctionné. J'ai résolu de supprimer le nom de 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 l'incrémentation dès le début.

1
andromeda

Le compteur d’incrémentation automatique d’une table peut être (re) défini de deux manières:

  1. En exécutant une requête, comme d'autres déjà expliqué:

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

  2. Utilisation de Workbench ou d'un autre outil visuel de conception de base de données. Je vais montrer à Workbench comment cela se fait - mais cela ne devrait pas être très différent dans un autre outil également. Faites un clic droit sur la table désirée et choisissez Alter table dans le menu contextuel. En bas, vous pouvez voir toutes les options disponibles pour modifier un tableau. Choisissez Options et vous obtiendrez ce formulaire: enter image description here

    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.

1
Kristijan Iliev

Depuis MySQL 5.6, l'approche ci-dessous fonctionne plus rapidement grâce à DDL en ligne (note algorithm=inplace):

alter table tablename auto_increment=1, algorithm=inplace;

1
artsafin

Essayez d'exécuter cette requête

 ALTER TABLE tablename AUTO_INCREMENT = value;

Ou essayez cette requête pour l'incrémentation de réinitialisation automatique

 ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;

Et définir l'incrément automatique puis exécuter cette requête

  ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
0
Shabeer Sha

ALTER TABLE nom_table AUTO_INCREMENT = 1

0
santosh mahule

J'ai cherché sur Google et trouvé cette question, mais la réponse que je cherche vraiment répond à deux critères:

  1. en utilisant des requêtes purement MySQL
  2. réinitialiser une table existante incrémentée automatiquement sur max (id) + 1

Comme je ne trouvais pas exactement ce que je voulais ici, j’ai bricolé la réponse à partir de diverses réponses et la partage ici.

Peu de choses à noter:

  1. la table en question est InnoDB
  2. la table utilise le champ id avec le type int comme clé primaire
  3. la seule façon de le faire uniquement dans MySQL est d'utiliser une procédure stockée
  4. mes images ci-dessous utilisent SequelPro comme interface graphique. Vous devriez pouvoir l’adapter en fonction de votre éditeur MySQL préféré.
  5. J'ai testé cela sur MySQL Ver 14.14 Distrib 5.5.61, pour debian-linux-gnu

Étape 1: Créer une procédure stockée

créez une procédure stockée comme ceci:

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 ;

Puis lancez-le.

Avant l'exécution, cela ressemble à ceci lorsque vous regardez sous Procédures stockées dans votre base de données.

enter image description here

Quand je cours, je sélectionne simplement la procédure stockée et appuie sur Run Selection

enter image description here

Remarque: les délimiteurs sont cruciaux. Par conséquent, si vous copiez et collez les réponses sélectionnées en haut de cette question, elles ont tendance à ne pas fonctionner pour cette raison.

Après avoir couru, je devrais voir la procédure stockée

enter image description here

Si vous devez modifier la procédure stockée, vous devez supprimer la procédure stockée, puis sélectionner de réexécuter.

Étape 2: appelez la procédure stockée

Cette fois, vous pouvez simplement utiliser les requêtes MySQL normales.

call reset_autoincrement('products');

À l'origine de mes propres requêtes SQL, notes dans https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc et adapté pour StackOverflow

0
Kim Stacks
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
0
Mihai Galan

Pour mettre à jour le dernier identifiant

 ALTER TABLE table_name AUTO_INCREMENT = 
 (SELECT (id+1) id FROM table_name order by id desc limit 1);
0
narasimharaosp