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
.
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.
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
simplement comme ceci:
ALTER TABLE tablename AUTO_INCREMENT = value;
référence: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
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.
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.
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
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 .
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.
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 !!!.
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
!!
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`);
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!
, Vous pouvez simplement tronquer la table pour réinitialiser la séquence
TRUNCATE TABLE TABLE_NAME
le compteur automatique d'incréments pour une table peut être (re)réglé de deux façons:
-
en exécutant une requête, comme d'autres déjà expliqué:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
-
à 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. ChoisissezOptions
et vous obtiendrez ce formulaire: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.
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.
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);
j'ai cherché sur Google et j'ai trouvé cette question, mais la réponse que je cherche vraiment répond à deux critères:
- en utilisant uniquement des requêtes MySQL
- 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:
- le tableau en question Est InnoDB
- le tableau utilise le champ
id
avec le typeint
comme clé primaire - la seule façon de le faire purement en MySQL est d'utiliser la procédure stockée
- 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é
- 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.
quand je cours, je sélectionne simplement la procédure stockée et la sélection de course de presse
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
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
la meilleure façon est de supprimer le champ avec AI et de l'ajouter à nouveau avec AI, fonctionne pour toutes les tables
je vous suggère D'aller à Query Browser et de faire ce qui suit:
- allez à schemata et trouvez la table que vous voulez modifier.
- clic droit et sélectionnez Copier créer l'énoncé.
- ouvrir un onglet résultat et coller la déclaration créer leur.
- 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.)
- remplacer N par 1.
- 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!