外键不起作用:错误代码1005,SQL状态HY000:无法创建表

时间:2012-05-09 17:06:25

标签: mysql sql foreign-keys foreign-key-relationship

我创建了两个表,之后我添加了外键约束。

这两个表定义如下:

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

我一直得到同样的错误,但无法弄清楚。我已经搜索了所有相关的主题。

3 个答案:

答案 0 :(得分:2)

你的FK config_id不能是一个自动增量字段,这没有多大意义吗?该字段反映了外表中的值,不能在本地表中任意设置。

我认为这就是你想要的:

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

答案 1 :(得分:1)

您的ALTER TABLE声明是落后的。由于personal_config.config_id是auto_increment主键,因此外键应在users表中针对personal_config定义,而不是personal_config针对users表。< / p>

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

答案 2 :(得分: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;