MYSQL ALTER Can't assign foreign key (errno: 150)

原创
2016/07/19 19:45
阅读数 32

现在有两张已建成的表,表1 city结构:

CREATE TABLE `city` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

另有一张表 region,内有一列city_id对应city表的id:

CREATE TABLE `region` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `region_name` varchar(255) NOT NULL,
  `city_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

这时需要在将region表的city_id加上外键约束,使用命令:

ALTER TABLE region

ADD CONSTRAINT fk_hui

FOREIGN KEY (city_id)

REFERENCES city(id);

但是报错误:MYSQL ALTER Can't assign foreign key (errno: 150)

导致这一错误的原因我已知的有两个:

1.city_id和city表里的id类型不一致,一个是int,一个是bigint,针对这种情况,只需要将city_id的类型改为bigint:

alter table region change city_id city_id bigint(11) NOT NULL

再添加外键约束就行(这里如果两者都是bigint,即使一个是bigint(12),一个是bigint(11),一样可以添加外键成功,不过尽量让两者完全一致);

2.添加的外键的名字已经存在,如本例中fk_hui,假如在另一张表district里有个city_id也关联了city表的id,并且外键约束的名字也是fk_hui,这时只需要修改一下外键的名字,比如改成fk_huihui即可。

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部