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

Requêtes MySQL Discussion :

Contraintes de clés étrangères non respectées


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Contraintes de clés étrangères non respectées
    Bonjour le forum,
    j'ai deux tables:
    parent(id nom prenom)

    fille(id nom prenom parent_id)

    pour creer les tables, j'ai fait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    create table parent (id int not null, nom varchar (15) not null, prenom varchar (40) not null, primary key (id), unique (nom,prenom)) type=innodb;
     
     
    create table fille (id int not null, nom varchar (15) not null, prenom varchar (40) not null, parent_id int not null, primary key (id), index par_id (parent_id), foreign key (parent_id) references parent(id) on delete cascade, unique (nom,prenom)) type=innodb;
    j'ai mis des enregistements dans les tables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    insert into parent (id,nom,prenom) values (1,'ANAGO','Desire');
    insert into parent (id,nom,prenom) values (2,'ANAGO','Clara');
    insert into parent (id,nom,prenom) values (3,'ANAGO','Lucien');
     
    insert into fille (id,nom,prenom,parent_id) values (1,'ANAGO','Alphred',1);
    insert into fille (id,nom,prenom,parent_id) values (2,'ANAGO','Dotou',2);
    insert into fille (id,nom,prenom,parent_id) values (3,'ALAVO','Alphred',1);
    insert into fille (id,nom,prenom,parent_id) values (4,'ANAGO','Jude',6);
    Mon Problème
    Pourquoi l'enregistrement 4 de la table fille a été accepté Alors que le parent 6 n'existe pas.


    la version de mysql sur mon serveur est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     select version();
     
    +------------+
    | version()  |
    +------------+
    | 4.0.16-log |
    +------------+
    1 row in set (0.00 sec)
    J'attends vos réponses. Merci d'avance...
    Ils ne savaient pas que s'étaient impossible. Alors ils l'ont fait.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    tu as vérifié que la table dans ta base est bien du type InnoDB ?

  3. #3
    Candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par mathix
    tu as vérifié que la table dans ta base est bien du type InnoDB ?
    Je crois que oui puisque je l'ai creer avec cette option
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     create table parent (id int not null, nom varchar (15) not null, prenom varchar (40) not null, primary key (id), unique (nom,prenom)) type=innodb;
     
     
    create table fille (id int not null, nom varchar (15) not null, prenom varchar (40) not null, parent_id int not null, primary key (id), index par_id (parent_id), foreign key (parent_id) references parent(id) on delete cascade, unique (nom,prenom)) type=innodb;
    Sinon comment pourais je le verifier dans ma base... Merci
    Ils ne savaient pas que s'étaient impossible. Alors ils l'ont fait.

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Sinon comment pourais je le verifier dans ma base
    Tu peux utiliser SQLYog pour te plonger dans les internes de tes tables...
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    essaye cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE fille

  6. #6
    Candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par mathix
    essaye cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE fille
    J'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    --------------------------------------------------------------------------------------------------------------------------+
    | fille | CREATE TABLE `fille` (
      `id` int(11) NOT NULL default '0',
      `nom` varchar(15) NOT NULL default '',
      `prenom` varchar(40) NOT NULL default '',
      `parent_id` int(11) NOT NULL default '0',
      PRIMARY KEY  (`id`),
      KEY `par_id` (`parent_id`)
    ) TYPE=MyISAM |
    +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    Ils ne savaient pas que s'étaient impossible. Alors ils l'ont fait.

  7. #7
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    ...et le type rapporté est MyISAM

    Quelques infos intéressantes peut-être :

    http://www.developpez.net/forums/viewtopic.php?t=226469
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  8. #8
    Candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par qi130
    ...et le type rapporté est MyISAM

    Quelques infos intéressantes peut-être :

    http://www.developpez.net/forums/viewtopic.php?t=226469




    Je fais un tour dans /etc/mysql/my.cnf je recherche skip-innodb, je le commente, je redemarre mysql => /etc/init.d/mysql restart , je recree mes tables

    je fais,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    show create table fille;
    et j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | fille | CREATE TABLE `fille` (
      `id` int(11) NOT NULL default '0',
      `nom` varchar(15) NOT NULL default '',
      `prenom` varchar(40) NOT NULL default '',
      `parent_id` int(11) NOT NULL default '0',
      PRIMARY KEY  (`id`),
      UNIQUE KEY `nom` (`nom`,`prenom`),
      KEY `par_id` (`parent_id`),
      CONSTRAINT `0_15` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`) ON DELETE CASCADE
    ) TYPE=InnoDB |
    +--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    j'essaie de creer un enregistrement fille dont le parent n'existe pas et bingo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    ERROR 1216: Cannot add or update a child row: a foreign key constraint fails


    merci à vous
    Ils ne savaient pas que s'étaient impossible. Alors ils l'ont fait.

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

Discussions similaires

  1. [9.1] Contrainte clé étrangère non respectée
    Par stc074 dans le forum Requêtes
    Réponses: 4
    Dernier message: 03/06/2014, 18h52
  2. Liste des clés étrangères non indexées de la base
    Par SheikYerbouti dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/12/2011, 15h11
  3. Réponses: 8
    Dernier message: 08/08/2008, 11h45
  4. Contrainte de clés étrangères
    Par CinePhil dans le forum Débuter
    Réponses: 4
    Dernier message: 04/03/2008, 22h26
  5. [Débutant ACCESS] Contrainte de clés étrangères
    Par elgringo2007 dans le forum Access
    Réponses: 2
    Dernier message: 12/06/2006, 18h56

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