IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Outils MySQL Discussion :

clé étrangère rétissante


Sujet :

Outils MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Par défaut clé étrangère rétissante
    Bonjour à tous,

    j'ai créé deux table ( entreprise et contact) ou un contact correspond à un salarié de l'entreprise et je voudrai que lorsque je supprime une entreprise, tous les contacts liés à celle-ci soient supprimés également. Pour ce faire je veux lier les deux tables par une clé etrangère mais c'est la que ca coince. La clé étrangère relierait la raison sociale de l'entreprise avec un champ de la table contact CO_EN_raisonSociale.

    Mon code est le suivant:


    DROP TABLE IF EXISTS `contacts`;
    CREATE TABLE `contacts` (
    `CO_identifiant` tinyint(4) NOT NULL auto_increment,
    `CO_nom` varchar(255) NOT NULL default '',
    `CO_prénom` varchar(255) default NULL,
    `CO_fonction` varchar(255) default NULL,
    `CO_email` varchar(255) default NULL,
    `CO_telephoneFixe` varchar(20) default NULL,
    `CO_telephonePortable` varchar(20) default NULL,
    `CO_civilite` varchar(255) NOT NULL default '',
    `CO_EN_raisonSociale` tinyint(4) NOT NULL default '',
    INDEX par_ind (CO_EN_raisonSociale),
    PRIMARY KEY (`CO_identifiant`),
    FOREIGN KEY (CO_EN_raisonSociale) REFERENCES entreprise(EN_raisonSociale) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB ;

    DROP TABLE IF EXISTS `entreprise`;
    CREATE TABLE `entreprise` (
    `EN_identifiant` tinyint(4) NOT NULL auto_increment,
    `EN_raisonSociale` varchar(255) NOT NULL default '',
    `EN_adresse` varchar(255) NOT NULL default '',
    `EN_boitePostale` varchar(30) default NULL,
    `EN_codePostal` varchar(10) NOT NULL default '',
    `EN_telephone` varchar(20) default NULL,
    `EN_web` varchar(255) default NULL,
    `EN_numDebutAbo` varchar(20) NOT NULL default '',
    `EN_numFinAbo` varchar(20) NOT NULL default '',
    `EN_dateDebutAbo` date default NULL,
    `EN_dateFinAbo` date default NULL,
    `EN_ville` varchar(255) NOT NULL default '',
    `EN_secteur` varchar(255) NOT NULL default '',
    `EN_abonner` varchar(255) NOT NULL default '',
    `EN_commentaire` varchar(255) default NULL,
    PRIMARY KEY (`EN_raisonSociale`),
    UNIQUE KEY `EN_identifiant` (`EN_identifiant`),
    UNIQUE KEY `EN_raisonSociale` (`EN_raisonSociale`),
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

    voila, j'ai déjà été sur plusieurs tutoriel et je pense faire ce qu'il faut mais je recoit toujours l'erreur #1005 - Ne peut cr饲 la table '.\clients\contacts.frm' (Errcode: 150)

    Que faut il que je fasse. Est ce que j'ai oublié quelquechose?

    d'avance merci

    PS: je bosse avec phpMyAdmin SQL Dump version 2.6.1

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Si tu exécutes ton script dans l'ordre indiqué, l'erreur peut se comprendre.
    Tu fais référence lors de la création de la table contacts à la table entreprise qui n'est pas encore créée
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Par défaut
    oki

    je viens de modifier mon script mais j'ai toujours la même erreur.

    as tu une autre idée?

  4. #4
    Membre chevronné
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Par défaut
    Bonjour,

    Attention... à ce que tu fais !
    Dans les clés étrangères il faut que le type du champ soit identique dans les deux tables, ce qui n'est pas le cas ici (dans ton script).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    contacts.CO_EN_raisonSociale => tinyint(4)
    entreprise.EN_raisonSociale => varchar(255)
    Je pense que tu t'es trompé sur le champ de ta clé étrangère. C'était surement entreprise(EN_identifiant) que tu voulais mettre je pense (à la place de raison sociale).
    La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
    -----------------------------------------------------------
    Retrouvez mes articles informatique sur mon Site Developpez.
    Le reste, sur le Site perso !


  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Par défaut
    oki

    je viens de faire la modification mais maintenant quand je lance mon script il me dit qu'il ne peut pas supprimer les enregistrements car ils sont liés avec une clé etrangère.

    Je ne me souviens plus très bien. Pour supprimer les contraintes de clé primaire et de clé étrangère c'est:

    ALTER TABLE contact DROP CONSTRAINT ALL;
    DROP TABLE IF EXIST contact;


    En fait je c'est que ce n'est pas ca car il me renvoi une erreur.

    pourriez vous me guider?

  6. #6
    Membre chevronné
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Par défaut
    Il faut supprimer dans l'ordre inverse de la création. Donc supprimer contacts avant entreprise dans ton cas.

    Sinon utiliser ceci pour forcer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET FOREIGN_KEY_CHECKS=0;
    ...
    SET FOREIGN_KEY_CHECKS=1;
    La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
    -----------------------------------------------------------
    Retrouvez mes articles informatique sur mon Site Developpez.
    Le reste, sur le Site perso !


  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Citation Envoyé par benoitinfrance
    je viens de modifier mon script mais j'ai toujours la même erreur.
    as tu une autre idée?
    En effet, je n'avais pas été regarder assez loin.
    Si tu regardes tes définitions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     CREATE TABLE `contacts` (
    ...
      `CO_EN_raisonSociale` tinyint(4) NOT NULL default '',
    ...
    FOREIGN KEY (CO_EN_raisonSociale) 
      REFERENCES entreprise(EN_raisonSociale) 
      ON DELETE CASCADE ON UPDATE CASCADE
     );
     
    CREATE TABLE `entreprise` (
      `EN_identifiant` tinyint(4) NOT NULL auto_increment,
      `EN_raisonSociale` varchar(255) NOT NULL default '',
    ...
    );
    Tu ne peux pas faire référence à une colonne de type différent.
    Il faudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FOREIGN KEY (CO_EN_raisonSociale)
      REFERENCES entreprise(EN_identifiant)
      ON DELETE CASCADE ON UPDATE CASCADE
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/11/2003, 15h57
  2. [EJB2.1 Entity] [BES] Mapping automatique et clés étrangères
    Par Bobby McGee dans le forum Java EE
    Réponses: 3
    Dernier message: 15/10/2003, 10h33
  3. [clé primaire et étrangère]
    Par viny dans le forum Requêtes
    Réponses: 9
    Dernier message: 05/08/2003, 18h23
  4. clé primaire composée de 2 clés étrangères
    Par Tigresse dans le forum Installation
    Réponses: 5
    Dernier message: 28/07/2003, 14h38
  5. [Script]prob de clés étrangères
    Par Seb7 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 08/07/2003, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo