Comment réinitialiser auto INCREMENT dans MySQL?

Comment puis-je réinitialiser le AUTO_INCREMENT d'un champ? Je veux que ça recommence à compter de 1 .

1009
demandé sur DineshDB 2012-01-19 12:37:49

21 réponses

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'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 tous ceux qui ont déjà été utilisés. Pour MyISAM, si la valeur est moins égal ou supérieur à la valeur maximale actuellement dans L'incrément AUTO_ colonne, 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 faire pour Réinitialiser un MySQL AutoIncrement à l'aide d'une valeur maximale à partir d'une autre table? sur la façon d'obtenir dynamiquement une valeur acceptable.

1697
répondu Niels 2017-05-23 11:47:29
ALTER TABLE tablename AUTO_INCREMENT = 1
124
répondu boobiq 2015-04-04 19:55:11
SET  @num := 0;

UPDATE your_table SET id = @num := (@num+1);

ALTER TABLE your_table AUTO_INCREMENT =1;

je pense que cela va le faire

54
répondu tronghiep92 2014-05-04 16:21:44

simplement comme ceci:

ALTER TABLE tablename AUTO_INCREMENT = value;

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

52
répondu fyr 2012-01-19 08:40:20

enter image description here il y a un moyen très simple avec phpmyadmin sous l'onglet "Opérations", vous pouvez définir, dans les options de la table, l'auto-engagement au nombre que vous voulez.

37
répondu Miles M. 2014-05-03 20:20:22

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 automatique d'incréments se réinitialisera et commencera automatiquement à partir de la valeur maximale existante.

29
répondu trust_words 2014-09-16 22:39:25

il y a de bonnes options données dans Comment réinitialiser MySQL colonne D'auto-apprentissage

Note que ALTER TABLE tablename AUTO_INCREMENT = value; ne pas de travail pour InnoDB

20
répondu Naz 2014-02-24 12:36:53

les réponses les mieux notées à cette question recommandent toutes"modifier votre AUTO_ incrément= valeur". Cependant, cela ne fonctionne que lorsque value dans l'alter est supérieur à la valeur maximale actuelle de la colonne d'auto-engagement. selon la documentation MySQL :

vous ne pouvez pas réinitialiser le compteur à une valeur inférieure ou égale à ont déjà été utilisés. Pour MyISAM, si la valeur est inférieure ou égale de la valeur maximale actuellement dans la colonne AUTO_ incrément, la valeur est réinitialisé au maximum actuel plus un. Pour InnoDB, vous pouvez utiliser ALTER TABLE ... AUTO_ incrément = valeur à partir de MySQL 5.0.3, mais si valeur est inférieure à la valeur maximale actuelle de la colonne, pas d'erreur se produit et la valeur de séquence actuelle n'est pas modifiée.

en essence, vous ne pouvez modifier AUTO_ incrément que pour augmenter la valeur de la colonne auto-incrément, pas la Réinitialiser à 1, comme le OP pose dans la deuxième partie de la question. Pour les options qui vous permettent réellement de définir L'AUTO_ incrément vers le bas à partir de son max Actuel, jetez un oeil à réordonner / réinitialiser auto increment primary key .

16
répondu lreeder 2017-05-23 11:55:10

ajout D'une mise à jour parce que la fonctionnalité a changé dans MySQL 5.6. À partir de MySQL 5.6 vous pouvez utiliser la table ALTER simple avec InnoDB:

ALTER TABLE tablename AUTO_INCREMENT = 1;

Les documents seront mis à jour pour refléter ceci:

http://dev.mysql.com/doc/refman/5.6/en/alter-table.html

mes tests montrent aussi que la table n'est pas copiée, la valeur est simplement changée.

16
répondu SeanN 2015-09-25 19:28:11
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é ceci dans certains de mes scripts , le champ id est abandonné et ensuite ajouté avec les réglages précédents , tous les champs existants dans la table de base de données sont remplis avec de nouvelles valeurs d'incrément automatique , cela devrait aussi fonctionner avec InnoDB .

notez que tous les champs de la table seront recomptés et auront d'autres ID !!!.

12
répondu Alin Razvan 2014-05-01 05:45:41

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

attention!! TRUNCATE TABLE your_table sera supprimer tout dans votre your_table !!

9
répondu Manohar Kumar 2016-06-13 11:27:55

c'est pour vider la table:

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`);
4
répondu Abdul Aziz Al Basyir 2017-04-05 06:51:03

voici ma solution, mais je ne conseillerai pas de le faire si votre colonne a des contraintes ou est connectée comme clé étrangère à d'autres tables car elle aurait de mauvais effets ou ne fonctionnera même pas.

> premier: supprimer la colonne

ALTER TABLE tbl_name DROP COLUMN column_id

> deuxième : recréer la colonne et la placer en premier si vous la voulez comme la première colonne que je suppose.

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

cela fonctionne bien!

3
répondu bdalina 2018-06-26 13:51:43

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

TRUNCATE TABLE TABLE_NAME
1
répondu Kunwar Babu 2017-07-20 10:46:54

le compteur automatique d'incréments pour une table peut être (re)réglé de deux façons:

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

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

  2. à l'aide d'un établi de travail ou d'un autre outil de conception d'une base de données visuelle. Je vais montrer dans Workbench comment c'est fait - mais il ne devrait pas être très différente dans d'autres. Par clic droit sur la table désirée et en choisissant Alter table du menu contextuel. En bas, vous pouvez voir toutes les options disponibles pour modifier une table. Choisissez Options et vous obtiendrez ce formulaire: enter image description here

    ensuite il suffit de définir la valeur désirée dans le champ Auto increment comme indiqué dans l'image. Ceci exécutera essentiellement la requête affichée dans la première option.

1
répondu Kristijan Iliev 2017-12-06 11:52:13

j'ai essayé de modifier la table et de mettre auto_ incrément à 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 mettre cette nouvelle colonne à incrémenter dès le début.

0
répondu andromeda 2015-07-06 10:08:35

pour mettre à jour le dernier plus un id

 ALTER TABLE table_name AUTO_INCREMENT = 
 (SELECT (id+1) id FROM table_name order by id desc limit 1);
0
répondu narasimharaosp 2017-08-11 12:31:10

ALTER TABLE tablename AUTO_ increment = 1

0
répondu santosh mahule 2018-05-21 10:30:13

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

  1. en utilisant uniquement des requêtes MySQL
  2. réinitialiser une table existante auto-incrément à max (id) + 1

comme je n'ai pas pu trouver exactement ce que je voulais ici, j'ai concocté la réponse à partir de diverses réponses et de la partager ici.

peu de choses à noter:

  1. le tableau en question Est InnoDB
  2. le tableau utilise le champ id avec le type int comme clé primaire
  3. la seule façon de le faire purement en MySQL est d'utiliser la procédure stockée
  4. mes images ci-dessous utilisent SequelPro comme GUI. Vous devriez être en mesure de 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 La Procédure Stockée

créer 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 ;

alors lancez-le.

avant l'exécution, il ressemble à ceci quand 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 la sélection de course de presse

enter image description here

Note: la partie délimiteurs est cruciale. 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 changer la procédure stockée, vous devez supprimer la procédure stockée, puis sélectionnez exécuter à nouveau.

Étape 2: l'Appel de 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
répondu Kim Stacks 2018-09-13 04:44:06

la meilleure façon est de supprimer le champ avec AI et de l'ajouter à nouveau avec AI, fonctionne pour toutes les tables

-1
répondu Grumpy 2017-06-03 13:17:05

je vous suggère D'aller à Query Browser et de faire ce qui suit:

  1. allez à schemata et trouvez la table que vous voulez modifier.
  2. clic droit et sélectionnez Copier créer l'énoncé.
  3. ouvrir un onglet résultat et coller la déclaration créer leur.
  4. allez à la dernière ligne de la déclaration create et cherchez L'augmentation automatique=N, (Où N est un nombre courant pour le champ auto_ incrément.)
  5. remplacer N par 1.
  6. Appuyez sur ctrl + entrée .

Auto_ incrément devrait se réinitialiser à une fois que vous entrez une nouvelle ligne dans la table.

Je ne sais pas ce qui va se passer si vous essayez d'ajouter une ligne où un champ auto_ incrément existe déjà.

Espérons que cette aide!

-2
répondu jeson 2014-02-24 12:39:19