2009-09-28 3 views
1

외래 키 제약 조건에 어려움이 있습니다. 나는 세 개의 테이블이 있습니다Mysql 매핑 테이블 FK 제약

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 

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

하지만 내가 할 수있는을 다음과 같이 FK 제약 조건을 정의 할 때

나는 Subscriptionfeatures에서 다음 레코드를 삽입 할 수 있습니다 ON DELETE CASCADE 절을 FK 제약 조건에 추가 할 때 동일한 레코드를 삽입하지 마십시오. 그러나 거부 이유를 이해할 수 없습니다.

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

이 문제에 대한 도움을 주시면 대단히 감사하겠습니다.

+0

내 쿼리를 살펴보면 먼저 값을 추가 한 다음 제한 조건을 생성 한 것을 볼 수 있습니다. 이는 데이터가 존재했음을 의미합니다. 실패한 전체 명령 순서와 정확한 오류 설명을 게시 할 수 있습니까? – Quassnoi

+0

나는 그것을 간과했다. 좀 더 테스트를 했어. 결국 그것은 내 자신의 어리석은 실수 인 것 같다! Emma를 사용하여 레코드를 삽입하고 새 행에 마지막 ID를 삽입 한 후 Enter 키를 누르지 않았으므로 값을 제출할 때 SQL 쿼리에 설정되지 않았습니다. 귀하의 도움에 감사드립니다! –

답변

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가 제공하는 오류는 무엇입니까?