Réinitialiser un auto incrément en SQL

Résolu
Ptesoleil Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   -  
 #gknx -
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

pixeltn
 
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
 
thanks
0
Kiwi
 
Bonjour, merciiii beaucoup :D
0
jcs
 
MDRRRRRR raquette sql, j'ai ris en cours
0
williamdes
 
merci
0
Moctar Ould Abeidy
 
Merci
0
zebulon
 
Merci pixeltn. Exactement ce que je recherchais.

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

Amicalement,
zebulon
20
mcdbrut
 
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   Statut Membre Dernière intervention   7
 
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   Statut Membre Dernière intervention   159
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   159 > Ptesoleil Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   > BlueMind Messages postés 583 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   > Ptesoleil Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   159 > Ptesoleil Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   3
 
Merci beaucoup 'pixeltn' pour votre réponse elle m'a beaucoup aidée.
3
multimaniack
 
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
Majic00
 
c'est la plus simple et la meilleure ideé
0
Thuyline
 
Merci infiniment ! Simple et efficace !
0
B-Aurly
 
Merciiiiiiiiiiii elle est trop sympas tas RAQUETTE SQL, MDRRRRRRRRRRRRRRRRRRR
0