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

如今有兩張已建成的表,表1 city結構:mysql

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

另有一張表 region,內有一列city_id對應city表的id:ui

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

這時須要在將region表的city_id加上外鍵約束,使用命令:get

ALTER TABLE regionit

ADD CONSTRAINT fk_huiio

FOREIGN KEY (city_id)table

REFERENCES city(id);stackoverflow

可是報錯誤:MYSQL ALTER Can't assign foreign key (errno: 150)tab

致使這一錯誤的緣由我已知的有兩個:

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便可。

相關文章
相關標籤/搜索