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

Langage SQL Discussion :

[MySQL 4.1.9] Impossible d'imposer ma contrainte : foreign key


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 19
    Points
    19
    Par défaut [MySQL 4.1.9] Impossible d'imposer ma contrainte : foreign key
    Bonjour a tous,
    je n arrive pas a imposer une contrainte d integrite a mes tables, j ai simplifié mon code que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE parent(id INT NOT NULL,
                        PRIMARY KEY (id));
    CREATE TABLE child(id INT, parent_id INT,
                       INDEX par_ind (parent_id),
                       FOREIGN KEY (parent_id) REFERENCES parent(id));
    jusque là tout va bien mais si je crée 2 enregistrements :
    parent : 123
    fils : 156,123 (qui depend donc en theorie du parent 123)
    rien ne m empeche de supprimer parent(123).... et je me retrouve avec un orphelin..
    comment imposer la contrainte ?
    (MySQL 4.1.9 / PHP Version 4.3.10)

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    J'ai épuré une ligne spécifique à MySQL mais voici le résultat sous Oracle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    10g SOC5> CREATE TABLE parent(id INT NOT NULL,
      2                      PRIMARY KEY (id));
     
    Table créée.
     
    10g SOC5> r
      1  CREATE TABLE child(id INT, parent_id INT,
      2*                    FOREIGN KEY (parent_id) REFERENCES parent(id))
     
    Table créée.
     
    10g SOC5> insert into parent values (123);
     
    1 ligne créée.
     
    10g SOC5> insert into child values (12, 123);
     
    1 ligne créée.
     
    10g SOC5> delete from parent where id = 123;
    delete from parent where id = 123
    *
    ERREUR à la ligne 1 :
    ORA-02292: violation de contrainte (SOC5.SYS_C00109150) d'intégrité - enregistrement fils existant
    Conclusion : pas de surprise ; d'ailleurs votre syntaxe est correcte.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    cool merci pour la reponse rapide
    mais ca veux dire que je dois passer sous Oracle ?
    Est ce qu il est possible que MySql ne gere pas ce genre de contrainte ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    J'ai trouvé ! En fait au moment de la creation de la table il faut juste lui indiquer :
    CREATE TABLE parent(...) TYPE=INNODB;
    le type par defaut (MYISAM) ne doit pas gerer ce genre de contrainte...
    merci pour le test sur Oracle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Requête SQL:
     
    DELETE FROM `parent` WHERE `id` =123 LIMIT 1
     
    MySQL a répondu:Documentation
    #1217 - Impossible de supprimer un enregistrement : une constrainte externe l'empeche

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

Discussions similaires

  1. [mysql++ et mingw gdb] Impossible d'utiliser le debugger
    Par zerbynette dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 11/11/2009, 16h30
  2. balises dans MYSQL lecture dans Flash impossible pourquoi?
    Par tigerdidier dans le forum Dynamique
    Réponses: 1
    Dernier message: 19/09/2007, 12h01
  3. balises dans MYSQL lecture dans Flash impossible pourquoi?
    Par tigerdidier dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 19/09/2007, 00h31
  4. mysql 6 et phpmyadmin, impossible de se connecter.
    Par theours dans le forum Outils
    Réponses: 2
    Dernier message: 03/09/2007, 11h49
  5. MySql 4.1 - connexion impossible de l'extérieur
    Par Laurent.B dans le forum Installation
    Réponses: 4
    Dernier message: 08/05/2006, 21h52

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