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?
Partager