2012-05-09 48 views
0

私が作成した2つのテーブルがあり、事後に外部キー制約を追加しています。外部キーが機能していません:エラーコード1005、SQLステートHY000:テーブルを作成できません

二つのテーブルは、次のような定義されています。

CREATE TABLE `user` (
    `user_id` int(11) NOT NULL auto_increment, 
    `user_ad_id` varchar(500) default NULL, 
    `user_name` varchar(100) NOT NULL, 
    `login_id` varchar(100) default NULL, 
    `email` varchar(256) NOT NULL, 
    `personal_config` int(10) NOT NULL, 
    PRIMARY KEY (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE IF NOT EXISTS personal_config (
    config_id INT(10) NOT NULL AUTO_INCREMENT, 
    last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    configuration TEXT(25600) NOT NULL, 
    PRIMARY KEY (config_id) 
)ENGINE=InnoDB DEFAULT CHARSET=utf8; 

ALTER TABLE personal_config ADD CONSTRAINT personal_config_fk_user FOREIGN KEY 
(config_id) REFERENCES user(personal_config); 

と私は同じエラーを取得しておくが、それを把握することはできません。私はこれに関連するすべてのスレッドを検索しました。

+0

を実行することができますか? –

+0

あなたの 'ALTER TABLE'は後方にあることに注意してください。 'config_id'はauto_incrementの値なので、' user'はFKからpersonal_configになります。 –

+0

秒後。テーブルは正常に作成され、そのテーブルは機能しません。 – MikeG

答えて

1

あなたALTER TABLEステートメントが後方にあります。 personal_config.config_idはauto_increment主キーですので、usersテーブルに対してpersonal_configではなく、personal_configに対して外部キーを定義する必要があります。

ALTER TABLE users ADD CONSTRAINT user_fk_personal_config 
    FOREIGN KEY (personal_config) 
    REFERENCES personal_config(config_id); 
+0

ちょうど第2の目のペアが必要でした。それは意味があり、それはそれを修正します。 – MikeG

2

あなたのFK config_idはオートインクリメントフィールドにすることはできません。そのフィールドは外部テーブルの値を反映しますが、ローカルテーブルに任意に設定することはできません。

私は、これはあなたが欲しいものだと思う:

ALTER TABLE user ADD CONSTRAINT personal_config_fk_user FOREIGN KEY (personal_config) REFERENCES personal_config(config_id); 
0

あなたはユーザーテーブルフィールドpersonal_configが主キーで設定している場合、最初のテーブルまたは第二の作成後は、エラーが出るん

CREATE TABLE IF NOT EXISTS personal_config (
    config_id INT(10) NOT NULL AUTO_INCREMENT, 
    last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    configuration TEXT(25600) NOT NULL, 
    PRIMARY KEY (config_id), FOREIGN KEY 
(config_id) REFERENCES user(personal_config) 
)ENGINE=InnoDB DEFAULT CHARSET=utf8; 
関連する問題