web-dev-qa-db-fra.com

Comment changer le compteur Auto Increment dans MySQL?

J'ai un champ ID qui est ma clé primaire et est juste un champ int.

J'ai moins de 300 lignes, mais maintenant, chaque fois que quelqu'un signe cet ID auto inc est entré très haut comme 11800089, 11800090, etc .... Y a-t-il un moyen de l'obtenir redescendre pour qu'il puisse suivre l'ordre (310,311,312)}.

Merci!

30
Chris Olson
ALTER TABLE tbl AUTO_INCREMENT=310;

Attention cependant, vous ne voulez pas répéter une identité. Si les chiffres sont aussi élevés, ils l’ont obtenu d’une manière ou d’une autre. Assurez-vous que vous n'avez pas de données associées aux numéros d'identification inférieurs.

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

49
Brad

Il existe peut-être un moyen plus rapide, mais voici comment je le ferais pour être sûr de recréer les ID

Si vous utilisez MySQL ou un autre serveur SQL, vous devez:

  1. Sauvegardez votre base de données
  2. Supprimer la colonne id
  3. Exporter les données
  4. TRUNCATE ou 'Vide' la table
  5. Recréez la colonne id sous la forme auto_increment
  6. Réimporter les données

Cela détruira les identifiants des lignes existantes. Par conséquent, s'ils sont importants, ce n'est pas une option viable.

3
ctrl_freak

En supposant que vous utilisez mysql parce que vous utilisez PHP. Vous pouvez réinitialiser auto_increment avec une instruction telle que

 alter table mytable autoincrement=301;

Soyez prudent, car les choses se casseront lorsque la valeur d'inc augmentera automatiquement.

1
Adrian Cornish

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. Ceci exécutera la requête indiquée dans la première option.

1
Kristijan Iliev

Je crois que mysql fait un select max sur l'id et met le suivant. Essayez de mettre à jour les identifiants de votre table avec la séquence souhaitée. Le problème que vous aurez, c'est que s'ils sont liés, vous devriez mettre une cascade dans la mise à jour du fk . Une question qui me vient à l'esprit est la suivante:

UPDATE Table SET id=(SELECT max(id)+1 FROM TAble WHERE id<700)

700 quelque chose de moins que le 11800090 que vous avez et près du 300 WHERE id> 0;

Je crois que les plaintes mysql si vous ne mettez pas un où

0
marspzb

Je jouais sur un problème similaire et j'ai trouvé cette solution:

SET @newID=0;
UPDATE `test` SET ID=(@newID:=@newID+1) ORDER BY ID;
SET @c = (SELECT COUNT(ID) FROM `test`);
SET @s = CONCAT("ALTER TABLE `test` AUTO_INCREMENT = ",@c);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;  

J'espère que cela aide quelqu'un dans une situation similaire!

0
Harald Wirth