Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Installation
Installation Forum d'entraide sur les problèmes liés à l'installation 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 14/08/2006, 22h37   #1
Membre éclairé
 
Avatar de soad
 
Inscription : février 2004
Messages : 500
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2004
Messages : 500
Points : 333
Points : 333
Par défaut mysql et les foreign key

hello tout le monde...

j'ai une table personne et une table pays et j'aimerais lieer ces table avec une foreign key

alors voila mon script :

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
 
CREATE TABLE Pays (
  pay_id INT(4) NOT NULL AUTO_INCREMENT,
  pay_nom VARCHAR(45) NOT NULL,
  PRIMARY KEY(pay_id)
)
TYPE=InnoDB;
 
 
 
CREATE TABLE Personne (
  per_id INT(11) NOT NULL AUTO_INCREMENT,
  per_nom VARCHAR(25) NOT NULL,
  per_prenom VARCHAR(25) NOT NULL,
  per_sexe CHAR NOT NULL,
  per_dateNaiss DATE NOT NULL,
  per_email VARCHAR(45) NOT NULL,
  per_login VARCHAR(20) NOT NULL,
  per_password VARCHAR(12) NOT NULL,
  per_npa VARCHAR(10) NOT NULL,
  per_localite VARCHAR(45) NOT NULL,
  per_adresse TEXT NULL,
  pay_id INT(4) NOT NULL,
  per_statut CHAR NULL,
  PRIMARY KEY(per_id),
  UNIQUE INDEX Index_login(per_login),
  INDEX Personne_FKIndex1(pay_id),
  FOREIGN KEY(pay_id)
    REFERENCES Pays(pay_id)
      ON DELETE RESTRICT
      ON UPDATE RESTRICT
)
TYPE=InnoDB;
Le problème c'est quand j'insère un enregistrement dans la table personne qui pointe sur un pays qui n'exite pas l'enregistrement est quand meme inséré !

Comment ca ce fait ?
j'ai mysql 4.0.15
soad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2006, 12h40   #2
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2005
Messages : 768
Points : 492
Points : 492
Citation:
Envoyé par soad
hello tout le monde...

j'ai une table personne et une table pays et j'aimerais lieer ces table avec une foreign key

alors voila mon script :
...
FOREIGN KEY(pay_id)
REFERENCES Pays(pay_id)
ON DELETE RESTRICT
ON UPDATE RESTRICT
)
TYPE=InnoDB;
[/CODE]

Le problème c'est quand j'insère un enregistrement dans la table personne qui pointe sur un pays qui n'exite pas l'enregistrement est quand meme inséré !

Comment ca ce fait ?
j'ai mysql 4.0.15
Bonjour,
ce n'est pas plutôt "cascade" que "restrict" dans ce cas ?
__________________
Cordialement,
Christophe Charron
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2006, 12h53   #3
Membre éclairé
 
Avatar de soad
 
Inscription : février 2004
Messages : 500
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2004
Messages : 500
Points : 333
Points : 333
j'ai essayé mais ca change rien !!!
soad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2006, 13h24   #4
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2005
Messages : 768
Points : 492
Points : 492
Citation:
Envoyé par soad
j'ai essayé mais ca change rien !!!
Le pays en question qui n'existe pas, c'est un identifiant <> 0 ?
__________________
Cordialement,
Christophe Charron
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2006, 14h34   #5
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2005
Messages : 768
Points : 492
Points : 492
Citation:
Envoyé par soad
j'ai essayé mais ca change rien !!!
heu j'avais lu en diagonale ... je ne vois pas la mention de la contrainte :
Code :
1
2
3
 
...
CONSTRAINT `perso_pays` FOREIGN KEY(pay_id) REFERENCES Pays(pay_id) ON DELETE RESTRICT ON UPDATE RESTRICT
?
__________________
Cordialement,
Christophe Charron
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2006, 17h00   #6
Membre éclairé
 
Avatar de soad
 
Inscription : février 2004
Messages : 500
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2004
Messages : 500
Points : 333
Points : 333
Citation:
Envoyé par Christophe Charron
Le pays en question qui n'existe pas, c'est un identifiant <> 0 ?
Que ce soit 0 ou autre chose ca fait la meme chose ! En faite j'ai aucun enregistrement dans pays donc ils ne devrait pas etre possible d'ajouter une personne !


Citation:
Envoyé par Christophe Charron
heu j'avais lu en diagonale ... je ne vois pas la mention de la contrainte :
Code :
1
2
3
 
...
CONSTRAINT `perso_pays` FOREIGN KEY(pay_id) REFERENCES Pays(pay_id) ON DELETE RESTRICT ON UPDATE RESTRICT
?
Avec la mention CONSTRAINT ou pas, il y a aucun changement !

C'est quand meme vraiment bizarre !
soad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2006, 18h24   #7
Rédacteur
 
Avatar de Biglo
 
Inscription : juillet 2002
Messages : 537
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : juillet 2002
Messages : 537
Points : 561
Points : 561
Ton code fonctionne chez moi.

Etant donné que MySQL ne provoque pas une erreur (mais un warning) si le moteur n'est pas valide lors d'une création de table, je te conseille de faire deux tests.

1) Vérifie que InnoDB est possible sur ton serveur :
2) Vérifie que tes tables utilisent bien InnoDB :
Code :
1
2
SHOW TABLE STATUS LIKE 'Personne'
SHOW TABLE STATUS LIKE 'Pays'
A part ça, je n'ai pas d'autres idées.
Biglo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 08h27   #8
Membre éclairé
 
Avatar de soad
 
Inscription : février 2004
Messages : 500
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2004
Messages : 500
Points : 333
Points : 333
Citation:
Envoyé par Biglo
Ton code fonctionne chez moi.

Etant donné que MySQL ne provoque pas une erreur (mais un warning) si le moteur n'est pas valide lors d'une création de table, je te conseille de faire deux tests.

1) Vérifie que InnoDB est possible sur ton serveur :
2) Vérifie que tes tables utilisent bien InnoDB :
Code :
1
2
SHOW TABLE STATUS LIKE 'Personne'
SHOW TABLE STATUS LIKE 'Pays'
A part ça, je n'ai pas d'autres idées.
Ouais c'était ca !!!
Cette fois easyPHP va partir à la poubelle, c'est peut etre rapidement installer mais y a tjs des trucs qui merde avec !
merci beaucoup
soad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 13h59   #9
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Citation:
Envoyé par soad
Ouais c'était ca !!!
Cette fois easyPHP va partir à la poubelle, c'est peut etre rapidement installer mais y a tjs des trucs qui merde avec !
merci beaucoup
Je voudrais connaitre la suite. Quel était l'erreur et avais-tu configuré la table pour qu'elle soit en InnoDb ?
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 19h57   #10
Membre éclairé
 
Avatar de soad
 
Inscription : février 2004
Messages : 500
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2004
Messages : 500
Points : 333
Points : 333
Citation:
Envoyé par berceker united
Je voudrais connaitre la suite. Quel était l'erreur et avais-tu configuré la table pour qu'elle soit en InnoDb ?
En faite le code sql était juste mais les tables ne se mettait pas en innoDB ! j'ai changer de serveur mysql et maintenant ca marche ! avant j'avais easyPHP 1.7 avec MySQL 4.0.15 je crois !
soad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 19h59   #11
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Mais phpmyadmin ne proposait pas des moteir dont le serveur pouvais disposer ?
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 07h49   #12
Membre éclairé
 
Avatar de soad
 
Inscription : février 2004
Messages : 500
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2004
Messages : 500
Points : 333
Points : 333
Citation:
Envoyé par berceker united
Mais phpmyadmin ne proposait pas des moteir dont le serveur pouvais disposer ?
Non ! a mon avis c'était mysql ! pcq je créais pas mes tables avec l'outils de création de table de phpmyadmin mais en exécutant le code sql du 1er message de ce poste !
soad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 09h40   #13
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Ok je comprend mieux alors. Merci
Et bonne décision sur le faite de faire une installe à la mano
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united 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 05h19.


 
 
 
 
Partenaires

Hébergement Web