Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels 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 20/07/2011, 11h22   #1
Membre du Club
 
Inscription : novembre 2006
Messages : 270
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 270
Points : 43
Points : 43
Par défaut Comment ajouter une clé étrangère dans un create

Bonjour,

J'ai une petite question concernat MySQL.
Jusqu'à présent, j'utilisais le moteur myisam avec PHP.
Je réalise actuellement une application .NET et souhaitant utiliser EntityFramwework je dois utiliser le moteur innoDB (pour les clés étrangères).

Hors j'ai un petit soucis au moment de la crétation de mes tables.
Je n'arrive pas à ajouter mes clés étrangères directement dans le "CREATE".
ça vient du fait que la table A pointe sur la table B et que B pointe sur la table A.
Voici mon script:
Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DROP SCHEMA IF EXISTS `test_transac`;
CREATE SCHEMA `test_transac` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `test_transac`;
 
DROP TABLE IF EXISTS utilisateur;
CREATE TABLE utilisateur(
	id_utilisateur INT(11) PRIMARY KEY AUTO_INCREMENT,
	id_secteur INT(11) NOT NULL,
	nom VARCHAR(80) NOT NULL,
	prenom VARCHAR(60) NOT NULL,
 
	CONSTRAINT `FK_utilisateur_ON_id_secteur` FOREIGN KEY (id_secteur) REFERENCES secteur(id_secteur)
)ENGINE=InnoDB;
 
DROP TABLE IF EXISTS secteur;
CREATE TABLE secteur(
	id_secteur INT(11) PRIMARY KEY AUTO_INCREMENT,
	nom VARCHAR(20) NOT NULL,
	id_responsable INT(11) NOT NULL,
 
	CONSTRAINT `FK_secteur_ON_id_responsable` FOREIGN KEY (id_responsable) REFERENCES utilisateur(id_utilisateur)
)ENGINE=InnoDB;

Citation:
Error Code: 1005. Can't create table 'test_transac.utilisateur' (errno: 150)
La seule solution que j'ai trouvé c'est de faire ceci.
Code sql :
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
DROP SCHEMA IF EXISTS `test_transac_ok`;
CREATE SCHEMA `test_transac_ok` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `test_transac_ok`;
 
DROP TABLE IF EXISTS utilisateur;
CREATE TABLE utilisateur(
	id_utilisateur INT(11) PRIMARY KEY AUTO_INCREMENT,
	id_secteur INT(11) NOT NULL,
	nom VARCHAR(80) NOT NULL,
	prenom VARCHAR(60) NOT NULL
)ENGINE=InnoDB;
 
DROP TABLE IF EXISTS secteur;
CREATE TABLE secteur(
	id_secteur INT(11) PRIMARY KEY AUTO_INCREMENT,
	nom VARCHAR(20) NOT NULL,
	id_responsable INT(11) NOT NULL
 
)ENGINE=InnoDB;
 
ALTER TABLE utilisateur
	ADD CONSTRAINT `FK_utilisateur_ON_id_secteur` FOREIGN KEY (id_secteur) REFERENCES secteur(id_secteur);
 
ALTER TABLE secteur
	ADD CONSTRAINT `FK_secteur_ON_id_responsable` FOREIGN KEY (id_responsable) REFERENCES utilisateur(id_utilisateur);
Quelqu'un peut me dire où est la subtilité pour utiliser la 1ère méthode svp.
Par avance merci
takinelinfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 11h31   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
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 : 11 008
Points : 18 279
Points : 18 279
Envoyer un message via MSN à CinePhil
Comme les deux tables se font référence, Au moins une clé étrangère devra être créée en dehors de la création de la table.
__________________
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 déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 11h37   #3
Membre du Club
 
Inscription : novembre 2006
Messages : 270
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 270
Points : 43
Points : 43
Apparament non, pas forcément .

Je viens de tester et ça à l'air de fonctionner.
Il faut mettre au tout début:
Citation:
SET FOREIGN_KEY_CHECKS = 0;
et rajouter à la fin
Citation:
SET FOREIGN_KEY_CHECKS = 1;
takinelinfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 11h38   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
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 : 11 008
Points : 18 279
Points : 18 279
Envoyer un message via MSN à CinePhil
Oui c'est vrai, je n'avais pas pensé à ce truc qu'on trouve notamment dans les fichiers générés par mysqldump.
__________________
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 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 04h38.


 
 
 
 
Partenaires

Hébergement Web