如今有兩張已建成的表,表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便可。