Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Administration
Administration Forum d'entraide sur l'administration de 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 24/07/2006, 13h18   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 23
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 23
Points : 11
Points : 11
Par défaut probleme importation données

Bonjour:

voici la base que j'ai créée:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
CREATE TABLE IF NOT EXISTS Branche_Direction (
	IdBranche INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
	NomBranche VARCHAR(50)
	);
 
CREATE TABLE IF NOT EXISTS Secteur (
	IdSecteur INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
	NomSecteur VARCHAR(50),
	IdBranche INT NOT NULL,
	INDEX FK_secteurindex ( IdBranche ),
	FOREIGN KEY (IdBranche) REFERENCES  Branche_Direction(IdBranche) ON UPDATE CASCADE ON DELETE CASCADE
	);
 
CREATE TABLE IF NOT EXISTS Categorie (
	IdCategorie INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
	NomCategorie VARCHAR (50)
	);
 
 
CREATE TABLE IF NOT EXISTS personne (
	idPersonne INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
	nomPersonne VARCHAR(50) NOT NULL,
	prenomPersonne VARCHAR(50) NOT NULL,
	login varchar(20) NOT NULL,
	motDePasse varchar(41) NOT NULL,
	mail varchar(60) NOT NULL,
	admin char(1) NOT NULL,
	idCategorie INT  DEFAULT 4,
	idSecteur INT  DEFAULT 4,
	INDEX FK_personnecategorieindex ( idcategorie ) ,
	INDEX FK_personnesecteurindex ( idsecteur ) ,
	FOREIGN KEY ( idCategorie ) REFERENCES Categorie(idCategorie) ON UPDATE CASCADE ON DELETE SET NULL,
	FOREIGN KEY ( idSecteur ) REFERENCES Secteur( idSecteur ) ON UPDATE CASCADE ON DELETE SET NULL
	);
 
 
INSERT INTO categorie VALUES (1,"Agents"),(2,"Cadres"),(3,"Direction"),(4,"aucune");

le probleme est que je veux importer des données d'un table existante de Personne, mais qui contient seulement
idpersonne,nompersonne,prenompersonne[...] mail, admin (pas de idcategorie ni idsecteur)

je fais donc:

INSERT INTO manouvellebase.personne(idpersonne,nompersonne[...]mail,admin SELECT * FROM monanciennebase.personne;

et la: cannot add or update a child row: a foreign key constraint fails.


y at-il un moyen de regler le probleme? ai-je mal créé mes tables?
merci de votre aide.



edit: je travaille avec MySQL 4.1 et les tables sont sous innoDB.
minirom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2006, 13h27   #2
Membre éclairé
 
Avatar de DBProg
 
Étudiant
Inscription : juillet 2006
Messages : 242
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 242
Points : 315
Points : 315
Salut !

C'est normal, dans la mesure où tu as deux clés étrangères dans la table personne, les contraintes seront vérifiées à chaque insertion/maj de données. Du coup ici comme tu essayes d'importer des données sans mettre de valeurs dans ces champs, la contrainte est à chaque violée ==> erreur.

Si vraiment tu veux importer ces champs tu peux forcer de cette manière :

Code :
1
2
3
4
5
SET FOREIGN_KEY_CHECKS = 0;
...
Tout tes INSERT ici
...
SET FOREIGN_KEY_CHECKS = 1;
Je n'ai jamais testé, mais c'est dans le manuel MySQL en tout cas !
DBProg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2006, 13h33   #3
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 23
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 23
Points : 11
Points : 11
C'est cool ca marche très bien.
J'avais plusieurs erreurs du meme type ca fait 3 jours que je bloquais dessus.
Merci


si j'ai pas donné de valeurs c'est parce que je croyais que le default 4 s'appliquerait... mais non.
minirom 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 11h41.


 
 
 
 
Partenaires

Hébergement Web