Réinitialiser un auto incrément en SQL

Résolu/Fermé
Ptesoleil Messages postés 27 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 27 août 2008 - 18 juil. 2008 à 09:38
 #gknx - 29 juin 2017 à 00:35
Bonjour,
Je doit remplir une base de données avec des données d'un fichier excel (via perl).
J'ai une table E définit comme suivant : EnzymeID (Primary Key - autoincrement)
EC (varchar)
NameE (varchar)
Family (varchar)
Nbgene (varchar -defaut null)

Cette table comporte des doublons que j'ai supprimé à l'aide d'une table intermédiaire, j'ai ensuite supprimé les enregistrements de ma table E et renvoyé les données sans doublons de ma table intermédiaire à ma table E. Mon probleme est que maintenant l'auto increment (clé primaire) n'est plus respecté! Cela me donne 1, 2, 5, 6, 9... dans ma table principale E. Peut t-on réinitialiser ce champ? et si oui comment? (avec une requete sql?)
A voir également:

7 réponses

Bonjour,

il est vrai que le poste est vieux de plus de trois ou quartes mois mais c'est pour les autres que je poste la solution exacte est la plus simple pour résoudre ce problème et la voici :

Il suffisait de mettre cette raquette sql : ALTER TABLE latable AUTO_INCREMENT=0
161
Fayssel MAROC
26 avril 2013 à 17:23
thanks
0
Bonjour, merciiii beaucoup :D
0
MDRRRRRR raquette sql, j'ai ris en cours
0
merci
0
Moctar Ould Abeidy
8 déc. 2014 à 19:16
Merci
0
Merci pixeltn. Exactement ce que je recherchais.

Super aussi ta "RAQUETTE" SQL. M.D.R.

Amicalement,
zebulon
20
je passe un peu tard...


Code :
DoCmd.RunSQL "ALTER TABLE matable ALTER COLUMN indice COUNTER(base,pas)"avec par ex: base=1 et pas=1
9
madvic Messages postés 21 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 9 juin 2018 7
20 nov. 2013 à 10:12
Sinon pour remettre l'AUTO_INCREMENT à la valeur max de l'id :
ALTER TABLE latable AUTO_INCREMENT = (SELECT MAX(id)+1 FROM latable);

7

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BlueMind Messages postés 583 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008 159
18 juil. 2008 à 09:51
Salut,

Une solution serait de supprimer et recréer la table (avec sauvegarde dans une table temporaire) et ensuite d'effectuer des insert de la table de sauvegarde vers la nouvelle table mais sans alimenter la colonne en autoincrement.
4
Ptesoleil Messages postés 27 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 27 août 2008
18 juil. 2008 à 10:05
Merci pour ta réponse aussi rapide.

Je créé dejà une table temporaire pour supprimer les doublons : voici mon code (sous perl!)

my $R_1 = $dbh -> do ("CREATE TABLE Copie SELECT DISTINCT EC,NameE,Family,Nbgene FROM enzyme GROUP BY EC,NameE");
my $R_2 = $dbh -> do ("DELETE FROM enzyme");
my $R_3 = $dbh -> do ("INSERT INTO enzyme SELECT * FROM Copie");
my $R_4 = $dbh -> do ("DROP TABLE Copie");

mais j'ai le message d'erreur suivant (et il ne me remplit pas la table) : "dbd::mysql::db do failed: column coun't doesn't match value count at row 1"
0
BlueMind Messages postés 583 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008 159 > Ptesoleil Messages postés 27 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 27 août 2008
18 juil. 2008 à 10:07
Normal car dans la table copie tu as toujours le numéro automatique donc tu ne peux pas faire SELECT *, tu dois lister toute tes colonne sauf la première qui est en autoincrement.
0
Ptesoleil Messages postés 27 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 27 août 2008 > BlueMind Messages postés 583 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008
18 juil. 2008 à 10:13
j'ai toujours le meme message d'erreur en enlevant * et en listant les colonnes :
my $R_3 = $dbh -> do ("INSERT INTO enzyme SELECT EC,NameE,Family,Nbgene FROM Copie");
Peut etre que je fais pas comme il faut?
0
Ptesoleil Messages postés 27 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 27 août 2008 > Ptesoleil Messages postés 27 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 27 août 2008
18 juil. 2008 à 11:11
Dans ma table Copie j'ai que les 4 champs sans l'auto increment : seulement lorsque je remet ces champs sans doublons dans la table E principale, j'ai l'impression qu'il croit qu'il y a seulement que 4 champs et il confond donc l'auto increment avec EC ; est ce possible?
0
BlueMind Messages postés 583 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008 159 > Ptesoleil Messages postés 27 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 27 août 2008
18 juil. 2008 à 11:14
Désolé pour le delais,

Normal, il faut aussi renseigner que tu ne veux pas alimenter ta première colonne dans l'ordre INSERT donc tu dois lister les colonnes de ta table d'accueil mais sans mettre la première colonne.

INSERT (EC,NameE,Family,Nbgene) INTO enzyme VALUES (SELECT EC,NameE,Family,Nbgene FROM Copie)"
0
nadia_22 Messages postés 1 Date d'inscription samedi 2 janvier 2010 Statut Membre Dernière intervention 3 janvier 2010 3
3 janv. 2010 à 15:43
Merci beaucoup 'pixeltn' pour votre réponse elle m'a beaucoup aidée.
3
multimaniack
1 juin 2013 à 23:08
J'arrive également très tard... mais comme chez moi ceci n'a pas fonctionné, voici ma méthode:

- Supprimer le champ ID
- insérer un champ ID avec A_I et index : PRIMARY
3
c'est la plus simple et la meilleure ideé
0
Merci infiniment ! Simple et efficace !
0
Merciiiiiiiiiiii elle est trop sympas tas RAQUETTE SQL, MDRRRRRRRRRRRRRRRRRRR
0