Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2011, 08h23   #1
Membre régulier
 
Inscription : mars 2002
Messages : 227
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : mars 2002
Messages : 227
Points : 91
Points : 91
Envoyer un message via ICQ à jean christophe
Par défaut [newbie] insérer une valeur dans un champ

Bonjour,

J'ai un probléme lors de l'insertion de données dans une table!
Disons que j'ai une table avec 2 champs:
1 id int(9) primary auto-increment
2 name varchar(256)

Quand je veux insérer une nouvelle valeur j'écris:
Code :
INSERT INTO `wp_sr_employees` (`name`) VALUES ('toke')
Mais ca ne marche pas car phpMyadmin me dis
Code :
#1062 - Duplicate entry '' for key 2
Ma question est comment dois je déclarer mon insert quand "id" est la clef et "autoincrement"?

Sincérement
Jean-Christophe
__________________
Sincérement
Jean-Christophe
jean christophe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 08h51   #2
Membre Expert
 
Inscription : mars 2005
Messages : 1 565
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2005
Messages : 1 565
Points : 2 178
Points : 2 178
Vous n'avez pas besoin de spécifier la valeur lorsque une colonne est de type auto incrément. Donc à priori, votre approche est la bonne.

Fournissez le script de création de cette table pour y voir un peu plus clair

Code :
SHOW CREATE TABLE wp_sr_employees ;
vmolines est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 10h08   #3
Membre régulier
 
Inscription : mars 2002
Messages : 227
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : mars 2002
Messages : 227
Points : 91
Points : 91
Envoyer un message via ICQ à jean christophe
Merci pour votre réponse vmolines

La syntaxe est due á wordpress, mais la commande fonctionne puisque la table est crée dans la database, et mes tentatives d'insertion sont faites via phpMyadmin.

Code :
1
2
3
4
5
6
7
8
9
10
 
IF($wpdb->get_var("SHOW TABLES LIKE '$table_name_employees'") != $table_name_employees) {
$sql = "CREATE TABLE " . $table_name_employees . " ( 
id_employees bigint(11) NOT NULL AUTO_INCREMENT, 
name VARCHAR(256) NOT NULL,
...
UNIQUE KEY cellphone (cellphone),
UNIQUE KEY email (email),
PRIMARY KEY (id_employees)
);";
Sincérement
Jean-Christophe
__________________
Sincérement
Jean-Christophe
jean christophe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 10h56   #4
Membre Expert
 
Inscription : mars 2005
Messages : 1 565
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2005
Messages : 1 565
Points : 2 178
Points : 2 178
Il faut que vous donniez le résultat complet de la commande "SHOW CREATE ..." . Exécuter cette commande SQL depuis PhpMyAdmin et donnez le résultat.

Merci
vmolines est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 11h04   #5
Membre régulier
 
Inscription : mars 2002
Messages : 227
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : mars 2002
Messages : 227
Points : 91
Points : 91
Envoyer un message via ICQ à jean christophe
C'est moi qui vous remercie!
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
CREATE TABLE `wp_sr_employees` (
 `id_employees` bigint(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(256) NOT NULL,
 `title` bigint(11) NOT NULL,
 `workarea` varchar(256) NOT NULL,
 `tasks` varchar(256) NOT NULL,
 `responsibility_area` varchar(256) NOT NULL,
 `education` varchar(256) NOT NULL,
 `extraeducation` varchar(256) NOT NULL,
 `competencies` varchar(256) NOT NULL,
 `networks` varchar(256) NOT NULL,
 `publication` varchar(256) NOT NULL,
 `email` varchar(256) NOT NULL,
 `phone` varchar(256) NOT NULL,
 `cellphone` varchar(256) NOT NULL,
 `image_url` varchar(256) NOT NULL,
 `extrainformations` varchar(256) NOT NULL,
 PRIMARY KEY  (`id_employees`),
 UNIQUE KEY `cellphone` (`cellphone`),
 UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
Sincérement
Jean-Christophe
__________________
Sincérement
Jean-Christophe
jean christophe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 12h19   #6
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

Vous violez une contrainte d'unicité :
Vous spécifiez que cellphone et email doivent être uniques, en plus d'être non nullable.

Vous devez donc spécifier des valeurs pour toutes vos colonnes non nullables qui n'ont pas de valeur par défaut, et pour les colonnes ayant une contrainte d'unicité, vous assurer que la valeur que vous spécifiez n'existe pas déjà. dans la table
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/01/2011, 13h27   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 986
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 986
Points : 18 234
Points : 18 234
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par jean christophe Voir le message
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
CREATE TABLE `wp_sr_employees` (
 `id_employees` bigint(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(256) NOT NULL,
 `title` bigint(11) NOT NULL,
 `workarea` varchar(256) NOT NULL,
 `tasks` varchar(256) NOT NULL,
 `responsibility_area` varchar(256) NOT NULL,
 `education` varchar(256) NOT NULL,
 `extraeducation` varchar(256) NOT NULL,
 `competencies` varchar(256) NOT NULL,
 `networks` varchar(256) NOT NULL,
 `publication` varchar(256) NOT NULL,
 `email` varchar(256) NOT NULL,
 `phone` varchar(256) NOT NULL,
 `cellphone` varchar(256) NOT NULL,
 `image_url` varchar(256) NOT NULL,
 `extrainformations` varchar(256) NOT NULL,
 PRIMARY KEY  (`id_employees`),
 UNIQUE KEY `cellphone` (`cellphone`),
 UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
BIGINT pour un numéro d'employé ! C'est la plus grosse entreprise du monde, voire de la galaxie !
BIGINT aussi pour title... c'est quoi title ? M. Mme, Mle, Me ?
256 caractères partout, ça fait beaucoup aussi !
Un nom de 256 caractères, ça doit plutôt être rare !
Et je n'aimerais pas taper un numéro de téléphone à 256 chiffres !

Bref, il est temps d'optimiser la taille des colonnes à des dimensions plus raisonnables !
Et quand je vois des noms de colonnes au pluriel (competencies, networks, tasks...), j'ai l'impression qu'il y a là des colonnes multi données, ce qui est contraire à la première forme normale !
Il semble donc qu'il faille aussi revoir la structure de la BDD !

Quant au message d'erreur, comme l'a dit aieeeuuuuu, c'est dû au fait que vous ne donnez pas de valeur à des colonnes qui ont une contrainte d'unicité.
La première insertion dans la table passe et attribue une chaîne vide par défaut à ces colonnes. La seconde insertion essaie de faire pareil et comme la chaîne vide existe déjà, ça viole la contrainte d'unicité et l'insertion est rejetée.
Les colonnes minimum requises pour une insertion dans cette table sont cellphone et email.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/01/2011, 13h10   #8
Membre régulier
 
Inscription : mars 2002
Messages : 227
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : mars 2002
Messages : 227
Points : 91
Points : 91
Envoyer un message via ICQ à jean christophe
Merci beaucoup de vos commentaires CinePhil & aieeeuuuuu

Je revoie tout ca!
C'est vrai qu'il y a des colonnes multi données, mais le but de la table est de presenter les employées d'une entreprise sur internet via Wordpress.
Je ne vois donc pas la nécessité de compliquer la mise á jour des données.

pour la colonne "title", c'est le titre ou la profession exercée dans l'entreprise (secrétaire, pedagogue, prof.....). Lá je veux faire une table spéciale (id_title + title_name) oú je récupére ensuite id_title et le mets dans la table wp_sr_employees. á mins que je ne fasse une table qu'avec title_name ... á voir

Je vous remercie encore une fois pour une critique constructive. Ca faisait un moment que je n'avais plus fait de tables, me revoila dans le bain!

Bonne journée
Sincérement
Jean-Christophe
__________________
Sincérement
Jean-Christophe
jean christophe est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h28.


 
 
 
 
Partenaires

Hébergement Web