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 :

ON DELETE CASCADE & FOREIGN KEY


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club Avatar de bambou
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2004
    Messages : 192
    Points : 69
    Points
    69
    Par défaut ON DELETE CASCADE & FOREIGN KEY
    Bonjour,

    Je suis en train d'essayer de créer des tables dans ma base MySQL et j'ai un problème avec ON DELETE CASCADE qui ne fonctionne pas.

    J'ai 2 tables basiques reliées par une foreign key et une cardianalité 1,n.

    La premère table est la table tribe qui contient les informations d'une tribe comme son nom l'indique.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE tribe (
      id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      name VARCHAR(100) NOT NULL,
      creation_date TIMESTAMP NOT NULL DEFAULT now(),
      PRIMARY KEY(id)
    )
    TYPE=InnoDB;

    La seconde table est la table user_tribe, qui contient les utilisateurs appartenant à la tribe. On retrouve donc ici une clé étrangère reliant l'utilisateur à la tribu à laquelle il appartient. La clé primaire de cette table est composée de la clé étrangère (tribe_id) et de l'identifiant unique de mon utilisateur (uid). Cet identifiant de l'utilisateur n'est pas une clé étrangère car les informations de l'utilisateur se trouvent dans une autre base de données.
    Code sql : 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 user_tribe (
      tribe_id INTEGER UNSIGNED NOT NULL,
      uid INTEGER UNSIGNED NOT NULL,
      join_date TIMESTAMP NOT NULL DEFAULT now(),
      users_request TEXT NULL,
      PRIMARY KEY(tribe_id, uid),
      INDEX user_tribe_FKIndex1(tribe_id),
      FOREIGN KEY(tribe_id)
        REFERENCES tribe(id)
          ON DELETE CASCADE
          ON UPDATE NO ACTION
    )
    TYPE=InnoDB;

    J'ai testé avec PHPMyAdmin de créer une tribe, puis d'ajouter des membres dans la table user_tribe. J'ai constaté 2 problèmes qui doivent être liés :

    - Je peux ajouter des membres à une tribu alors que cette tribu n'existe pas (tribe_id = 3, alors qu'il n'y a pas de tribu dans tribe avec un id=3).

    - Si je supprime une tribu, les lignes liées correspondantes dans la table user_tribe ne sont pas supprimées en cascade.

    J'ai testé d'abord avec des Tables MyISAM, mais ça ne marchait pas, j'ai lu qu'il fallait des tables InnoDB pour que les références fonctionnent, je suis donc passé en Innodb mais ça n'a rien changé

    La version du serveur MySQL que j'utilise est 5.0.45 et je n'ai pas directement accés aux fichier de configuration. Je peux voir quelques variables via PhpMyAdmin. Dans ses variables, j'ai repéré que Have Innodb était marquée comme DISABLED. Est-ce que mes problèmes venir de la?

  2. #2
    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
    Il y a des chances, oui...

    Déclarer les tables en type InnoDB est un point, activer le moteur InnoDB en est un autre...
    "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

Discussions similaires

  1. Problème de foreign key sur un DELETE
    Par Timo31 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 18/08/2011, 09h37
  2. Ajout de contraintes On Delete Cascade sur des foreign key
    Par weebo dans le forum Développement
    Réponses: 7
    Dernier message: 21/02/2011, 10h03
  3. [persistance] delete et foreign keys
    Par NeoKript dans le forum Persistance des données
    Réponses: 1
    Dernier message: 22/11/2010, 19h00
  4. foreign key on delete
    Par ded jay dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 08/09/2009, 12h48
  5. delete et foreign key
    Par babarincairo dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 24/04/2006, 19h03

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