2012-05-09 59 views
0

我有兩個我創建的表,我在事後添加外鍵約束。外鍵不工作:錯誤代碼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

你從哪裏得到的錯誤執行,第一CREATE TABLE或第二後? –

+0

請注意,您的'ALTER TABLE'似乎後退。由於'config_id'是auto_increment值,'user'應該有一個FK到personal_config,而不是相反。 –

+0

之後。這些表格創建的很好,它只是不起作用的alter table。 – MikeG

回答

1

ALTER TABLE說法是落後的。由於personal_config.config_id是一個auto_increment主鍵,因此應在users表中針對personal_config定義外鍵,而不是在personal_config中針對users表定義該外鍵。

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

只需要第二雙眼睛。好吧,這是有道理的,並修復它。 – 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; 
相關問題