Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en 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 29/10/2007, 18h07   #1
Membre habitué
 
Avatar de PoichOU
 
Homme PoichOU
Étudiant
Inscription : juillet 2006
Messages : 296
Détails du profil
Informations personnelles :
Nom : Homme PoichOU
Âge : 24
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Associations - ONG

Informations forums :
Inscription : juillet 2006
Messages : 296
Points : 114
Points : 114
Par défaut Problème avec les clés étrangères

Bonjour

Je voudrais savoir comment marche les clés étrangères sous mysql. Pour cela j'ai crée 2 tables : client et coordonnee.
L'idée est qu'un client peut avoir plusieurs coordonnées.

Voici le code :
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
CREATE TABLE `client`
(
  `id` INT( 11 ) NOT NULL AUTO_INCREMENT,
  `nom` VARCHAR( 50 ) NOT NULL,
  `prenom` VARCHAR( 50 ) NOT NULL,
  PRIMARY KEY  (`id`),
) TYPE=INNODB
  ENGINE=MyISAM 
  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 
  COMMENT = 'table contenant les clients'
;
 
 
CREATE TABLE `coordonnee`
(
  `id` INT( 11 ) NOT NULL AUTO_INCREMENT,
  `id_client` INT( 11 ) NOT NULL,
  `adresse` LONGTEXT NOT NULL COMMENT 'adresse postale',
  `code_postal` VARCHAR( 20 ) NOT NULL,
  `ville` VARCHAR( 50 ) NOT NULL,
  `telephone` VARCHAR( 20 ) NOT NULL,
  PRIMARY KEY  (`id`),
  FOREIGN KEY(id_client) REFERENCES client(id) ON DELETE CASCADE
) TYPE=INNODB
  ENGINE=MyISAM 
  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 
  COMMENT = 'table contenant les coordonnées d un client'
;
Cependant je peux insérer des données dans la table coordonnee sans qu'il y ait de client associé. ex :

Code :
1
2
INSERT INTO `coordonnee` (`id`, `id_client`, `adresse`, `code_postal`, `ville`, `telephone`) 
VALUES (1, 1, '1 rue des halles', '75001', 'Paris', '0102030405');

J'aurai pensé avoir une erreur du genre "le client 1 n'existe pas" non ?


ensuite je crée un client :

Code :
1
2
INSERT INTO `client` ( `id` , `nom` , `prenom` )
VALUES ('1', 'toto', 'titi');
si je le supprime j'aurai pensé que ça supprimerai la coordonnée associée, mais ce n'est pas le cas.

Je me suis trompé quelque part ?


merci de votre aide

PoichOU
PoichOU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2007, 18h29   #2
Rédactrice
 
Avatar de Fleur-Anne.Blain
 
Inscription : juillet 2006
Messages : 2 662
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 2 662
Points : 5 590
Points : 5 590
Citation:
Envoyé par PoichOU Voir le message

si je le supprime j'aurai pensé que ça supprimerai la coordonnée associée, mais ce n'est pas le cas.

Je me suis trompé quelque part ?


merci de votre aide

PoichOU

pour supprimer tu fais bien :
Code :
DROP TABLE nomtable CASCADE CONSTRAINT;
?
__________________
la culture c'est comme la confiture moins on en a plus on l'étale.

Vous souhaitez contribuer aux rubriques Solutions d'entreprises ou BI, contactez-moi

Mes tutos
Fleur-Anne.Blain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2007, 23h22   #3
Membre habitué
 
Avatar de PoichOU
 
Homme PoichOU
Étudiant
Inscription : juillet 2006
Messages : 296
Détails du profil
Informations personnelles :
Nom : Homme PoichOU
Âge : 24
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Associations - ONG

Informations forums :
Inscription : juillet 2006
Messages : 296
Points : 114
Points : 114
salut, merci de ta réponse,

euh non je fais :
Code :
DELETE FROM client WHERE id=1
PoichOU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2007, 12h26   #4
Membre du Club
 
Inscription : janvier 2007
Messages : 66
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 66
Points : 49
Points : 49
Bonjour,

Si je ne fait pas fausse route, MyISAM ne supporte pas les contraintes liées aux clés étrangères (InnoDB oui par contre).
JinJu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2007, 12h30   #5
Nouveau Membre du Club
 
Avatar de Shinn77
 
Inscription : juin 2007
Messages : 51
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : juin 2007
Messages : 51
Points : 27
Points : 27
Envoyer un message via ICQ à Shinn77 Envoyer un message via MSN à Shinn77
J'allais dire comme JinJu qui m'a devancé =)

Si tu veux utiliser les contraintes d'intégritées liées au clé étrangère, tu dois convertir tes 2 tables de MyISAM à InnoDB.

MyISAM est très rapide mais ne gère pas les clés étrangères, donc tu dois passer tes tables en InnoDB.

Les contraintes CASCADES marche sans problème sous InnoDB.

A+
Shinn77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 09h46   #6
Membre habitué
 
Avatar de PoichOU
 
Homme PoichOU
Étudiant
Inscription : juillet 2006
Messages : 296
Détails du profil
Informations personnelles :
Nom : Homme PoichOU
Âge : 24
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Associations - ONG

Informations forums :
Inscription : juillet 2006
Messages : 296
Points : 114
Points : 114
c'est bien ce que j'avais cru voir mais j'sais pas pkoi j'avais mis

Code :
1
2
TYPE=INNODB
  ENGINE=MyISAM
merci à vous
PoichOU 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 04h25.


 
 
 
 
Partenaires

Hébergement Web