Mysql映射表FK约束

时间:2009-09-28 16:24:38

标签: mysql foreign-keys constraints

我遇到了外键约束的一些困难。我有三张桌子:

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)

当我有以下记录时

Features
    1    Testfeature
Subscriptions
    1    Testsubscription

我可以在定义FK约束时在Subscriptionfeatures中插入以下记录,如下所示

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

但是在向FK约束添加ON DELETE CASCADE子句时我无法插入相同的记录,但我必须管理我不明白其拒绝的原因!

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

对此的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

这对我有用:

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);

MySQL给出的错误是什么?