Page 1 sur 1

valeur ID dans MySql

Posté : 17 oct. 2007, 09:20
par cmoi
Bonjour,

j'ai un souci avec ma base MySql où, pour une raison que je ne comprends pas, les ID ne s'incrémentent plus et restent à 0.

Y a-t-il (sûrement !!) une fonction, qui permette, de repartir d'une valeur et d'ajouter 1 à chaque nouvel enregistrement ?

Merci pour votre aide.

Posté : 17 oct. 2007, 09:30
par Hubert Roksor
Poste le schéma de ta table sous la forme d'une instruction CREATE TABLE.

Posté : 17 oct. 2007, 10:03
par cmoi
Poste le schéma de ta table sous la forme d'une instruction CREATE TABLE.
clairement je dois faire quoi ?? :(

Posté : 17 oct. 2007, 10:27
par d0m
clairement je dois faire quoi ??
nous donner la structure de ta table.

Ton champ index id est bien en auto_increment?

Posté : 17 oct. 2007, 10:31
par cmoi
le champ id n'est pas en auto-incrément et je ne peux le mettre.

son type est mediumint
ses attributs : unsigned

Posté : 17 oct. 2007, 10:38
par d0m
l'auto-incrémentation est comme son nom l'indique justement fait pour "d'ajouter 1 à chaque nouvel enregistrement".

Si il n'est pas spécifié, la base ne va pas le faire tout seul quand tu insères un nouvel enregistrement.
Il va donc falloir le faire toi même c'est à dire lors de l'insertion lui préciser la valeur du champ id (sinon celui ci prendra la valeur par défaut qui est apparement 0 chez toi)

Il faut donc avant d'insérer faire une requête de type SELECT qui va obtenir le max de tes ids dans la table. Tu l'incrémente d'1 et tu insère ensuite ton enregistrement en précisant le champ id à cette nouvelle valeur.

Posté : 17 oct. 2007, 10:45
par Ryle
Poste le schéma de ta table sous la forme d'une instruction CREATE TABLE.
clairement je dois faire quoi ?? :(
Clairement, il te demande de poster le script de création de la table en question.

Le plus simple étant sous phpMyAdmin d'exporter la structure de la table, ce qui permet d'avoir toutes les infos sur les champs, les types, les tailles, les attributs, etc. :)

Posté : 17 oct. 2007, 10:46
par Hubert Roksor
clairement je dois faire quoi ?? :(
Commencer par apprendre les bases :?: Commence par le manuel aux chapitres 11, 13 et 12. Ça te donnera 90% de ce dont tu as besoin, notamment SHOW CREATE TABLE.

Posté : 17 oct. 2007, 10:50
par cmoi
Voilà la structure de ma table :

Code : Tout sélectionner

Structure de la table 'sites_v234' -- CREATE TABLE sites_v234 ( id mediumint(8) unsigned NOT NULL default '0', id_cat mediumint(8) unsigned NOT NULL, titre varchar(100) NOT NULL, titre2 varchar(100) default NULL, titre3 varchar(100) default NULL, description varchar(255) NOT NULL, url varchar(150) NOT NULL, url_image varchar(150) default '', url_rss varchar(150) default NULL, nom_proprio varchar(50) NOT NULL, email_proprio varchar(75) NOT NULL, date_validation date NOT NULL, activation tinyint(1) NOT NULL default '1', niveau tinyint(1) unsigned NOT NULL default '5', nb_clics mediumint(8) unsigned NOT NULL default '0', moyenne_votes decimal(4,2) unsigned NOT NULL default '0.00', nb_votes mediumint(8) unsigned NOT NULL default '0', nb_com mediumint(8) unsigned NOT NULL default '0' ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Posté : 17 oct. 2007, 11:02
par Sékiltoyai
Ton champ id doit être un champ de type entier, muni d'une clé primaire pour pouvoir être auto-incrémenté, soit par exemple :

Code : Tout sélectionner

id MEDIUMINT(8) UNSIGNED AUTO_INCREMENT PRIMARY
(ici les attributs NOT NULL et DEFAULT sont ignorés par le serveur)

Posté : 17 oct. 2007, 11:20
par cmoi
Quand je veux modifier la structure, j'obtiens ça :

Erreur
requête SQL:

ALTER TABLE `sites_v234` CHANGE `id` `id` MEDIUMINT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT

MySQL a répondu:

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

Posté : 17 oct. 2007, 11:25
par d0m
and it must be defined as a key
comme le dis l'erreur, ton champ doit être défini comme clé.

Posté : 17 oct. 2007, 11:35
par cmoi
j'ai finalement résolu mon problème.
IL y avait des doublons, donc pas de clé primaire, donc pas d'auto-incrément.

Merci à tous.