2009-09-28 9 views
1

Je rencontre des difficultés avec les contraintes de clé étrangère. J'ai trois tables:Contraintes FK de table de mappage Mysql

Features 
    ID PK AUTO_INC 
    Title VARCHAR 
Subscriptions 
    ID PK AUTO_INC 
    Title VARCHAR 
Subscriptionfeatures 
    ID PK AUTO_INC 
    feature_id INT (index) 
    subscription_id INT (index) 

Quand j'ai les documents suivants

Features 
    1 Testfeature 
Subscriptions 
    1 Testsubscription 

je peux insérer l'enregistrement suivant dans Subscriptionfeatures lors de la définition d'une contrainte FK comme suit

ALTER TABLE subscriptionfeatures ADD CONSTRAINT FK_feature FOREIGN KEY (feature_id) REFERENCES features(id); 
Subscriptionfeatures 
    x 1 1 => ok 

Mais je peux ne pas insérer l'enregistrement identique lors de l'ajout d'une clause ON DELETE CASCADE à la contrainte FK, mais je dois administrer je ne comprends pas la raison de son refus!

ALTER TABLE subscriptionfeatures ADD CONSTRAINT FK_feature FOREIGN KEY (feature_id) REFERENCES features(id) ON DELETE CASCADE; 
Subscriptionfeatures 
    x 1 1 => fails 

Une aide sur ce point serait grandement appréciée!

+0

Si vous regardez dans ma requête, vous verrez que j'ai d'abord ajouté les valeurs, puis créé la contrainte. Cela signifie que les données ont existé. Pourriez-vous s'il vous plaît poster toute la séquence de commande qui échoue et la description exacte de l'erreur? – Quassnoi

+0

J'ai négligé cela. J'ai fait d'autres tests. Finalement, il semble que c'est ma propre erreur stupide! Je testais en utilisant Emma pour insérer les enregistrements et ne pas appuyer sur Entrée après avoir inséré le dernier identifiant dans une nouvelle ligne, donc quand soumettre la valeur n'a pas été définie dans la requête sql. Appréciez votre aide! –

Répondre

1

Cela fonctionne pour moi:

CREATE TABLE Features (
     id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
     Title VARCHAR(100) 
     ) Engine=InnoDB; 
CREATE TABLE Subsriptions (
     id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
     Title VARCHAR(100) 
     ) Engine=InnoDB; 

CREATE TABLE Subscriptionfeatures (
     id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
     feature_id INT NOT NULL, 
     subscription_id INT NOT NULL, 
     KEY ix_subscriptionfeatures_feature (feature_id), 
     KEY ix_subscriptionfeatures_subscription (subscription_id) 
     ) Engine=InnoDB; 
INSERT 
INTO Features 
VALUES (1, 'Testfeature'); 
INSERT 
INTO Subsriptions 
VALUES (1, 'Testsubscription'); 

ALTER TABLE subscriptionfeatures ADD CONSTRAINT FK_feature FOREIGN KEY (feature_id) REFERENCES features(id) ON DELETE CASCADE; 

INSERT 
INTO Subscriptionfeatures (feature_id, subscription_id) 
VALUES (1, 1); 

Quelle est l'erreur la MySQL donne?

Questions connexes