Rechercher : dans
Par :

Réinitialiser un auto incrément en SQL

Dernière réponse le 2 nov 2008 à 07:43:24 Ptesoleil, le 18 jui 2008 à 09:38:37 
 Signaler ce message aux modérateurs

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?)

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « Réinitialiser un auto incrément en SQL » dans :
Grand Theft Auto IV ( GTA4 ) - Bugs récurrents VoirGTA4 AAAaaaah, un excellent jeu que ce Grand Theft Auto 4. En dehors de quelques détails… Chez beaucoup de gens, le jeu ne démarre pas après l’installation. Dans une grande majorité des cas, il faudra vérifier la puissance de l’ordinateur...
Le langage SQL VoirQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...
SQL - Création de table VoirLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE...
SQL - Commande SELECT VoirLe langage de manipulation de données Le SQL est à la fois un langage de manipulation de données et un langage de définition de données. Toutefois, la définition de données est l'oeuvre de l'administrateur de la base de données, c'est pourquoi la...

1

BlueMind, le 18 jui 2008 à 09:51:14

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.
A quoi bon soulever des montagnes quand il est si simple de ­passer par-dessus ?

Répondre à BlueMind

2

Ptesoleil, le 18 jui 2008 à 10:05:49

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"

Répondre à Ptesoleil

3

BlueMind, le 18 jui 2008 à 10:07:39

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.
A quoi bon soulever des montagnes quand il est si simple de ­passer par-dessus ?

Répondre à BlueMind

4

Ptesoleil, le 18 jui 2008 à 10:13:02

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?

Répondre à Ptesoleil

5

Ptesoleil, le 18 jui 2008 à 11:11:32

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?

Répondre à Ptesoleil

6

BlueMind, le 18 jui 2008 à 11:14:09

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)"
A quoi bon soulever des montagnes quand il est si simple de passer par-dessus ?

Répondre à BlueMind

7

Ptesoleil, le 18 jui 2008 à 11:35:33

Merci de m'avoir répondu;
Je n'avais pas pensé à lister les colonnes ; cependant il me dit que j'ai une erreur dans ma requete; j'ai aussi essayer : INSERT INTO enzyme (EC,NameE,Family,Nbgene) VALUES (SELECT EC,NameE,Family,Nbgene FROM Copie)
mais j'ai aussi une erreur mais je vois pas où. Peux tu encore m'aider? Merci

Répondre à Ptesoleil

8

BlueMind, le 18 jui 2008 à 11:44:13

C'est quoi l'erreur ?
Il doit bien te donner un message non ?
A quoi bon soulever des montagnes quand il est si simple de ­passer par-dessus ?

Répondre à BlueMind

9

Ptesoleil, le 18 jui 2008 à 11:50:20

Oui mais j'ai trouvé pourquoi ; j'avais fait une petite modification qui ne fonctionnait pas ;et il ne fallait pas mettre VALUES lorsque l'on met un SELECT;
seulement nouveau probleme : il me réincremente l'auto ID à partir de la dernière valeur avant que j'efface ma table principale (donc il commence pour mon cas à 980 et non à 1)

Répondre à Ptesoleil

10

BlueMind, le 18 jui 2008 à 11:52:50

Ta table principale tu ne dois pas l'effacer, tu dois la supprimer et la créé à nouveau -> DROP/CREATE comme tu le fais pour copie.
A quoi bon soulever des montagnes quand il est si simple de passer par-dessus ?

Répondre à BlueMind

11

Ptesoleil, le 18 jui 2008 à 13:00:56

Ok Merci beaucoup de m'avoir aider.
J'ai fait d'une autre facon : j'ai d'abord tout envoyer dans ma table Copie (les 4 colonnes) ; ensuite j'ai enlever les doublons et insérer ces données dans la table E puis effacer la table Copie : cela m'evite de supprimer la table E et de la recréer aussitot ; et l'auto increment part de 1!
Merci encore!

Répondre à Ptesoleil

12

 pixeltn, le 2 nov 2008 à 07:43:24
  • +15

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

Répondre à pixeltn