Comment puis-je réinitialiser le AUTO_INCREMENT
d'un champ? Je veux qu'il recommence à compter à partir de 1
.
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.
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
Simplement comme ça:
ALTER TABLE tablename AUTO_INCREMENT = value;
référence: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
Il 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é.
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.
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 .
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.
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.
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 !!!.
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
!!
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`);
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.
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!
Vous pouvez simplement tronquer la table pour réinitialiser la séquence
TRUNCATE TABLE TABLE_NAME
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.
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 déjà expliqué:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
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:
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.
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;
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;
ALTER TABLE nom_table AUTO_INCREMENT = 1
J'ai cherché sur Google et trouvé cette question, mais la réponse que je cherche vraiment répond à deux critères:
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:
id
avec le type int
comme clé primairecré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.
Quand je cours, je sélectionne simplement la procédure stockée et appuie sur Run Selection
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
Si vous devez modifier la procédure stockée, vous devez supprimer la procédure stockée, puis sélectionner de réexécuter.
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
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
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);