2009-09-28 2 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 

я могу вставить следующую запись в Subscriptionfeatures при определении ограничения FK следующим

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

Но я могу не вставляйте идентичную запись при добавлении предложения 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, ​​чтобы вставить записи и не нажимал enter после вставки последнего идентификатора в новую строку, поэтому при отправке значения не было задано в sql-запросе. Цените свою помощь! – 2009-10-04 11:57:45

ответ

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 дает?

 Смежные вопросы

  • Нет связанных вопросов^_^