[英]mysql errno: 150 “Foreign key constraint is incorrectly formed”- MariaDB
[英]MySQL 5.5 errno: 150 “Foreign key constraint is incorrectly formed”
关于此错误有很多问题,但我似乎找不到与我类似的情况。
我的第一张桌子(用户):
我的第二张桌子(学院):
我正在尝试更改第一个表并添加引用第二个表的id
的外键 :
ALTER TABLE users
ADD CONSTRAINT FOREIGN KEY (collegelinkId)
REFERENCES databaseName.colleges (id);
失败并显示错误(errno: 150 "Foreign key constraint is incorrectly formed")
。
这两个表之间唯一不同的参数是auto_increment
。 但是,我无法将auto_increment添加到我的用户表collegelinkId
列中,因为其id
已设置为auto_increment。
如果主键和外键的类型不完全匹配,我们将期望看到此错误。 虽然两者看起来都是宽度为1的整数,但我猜这里是键关系中的INT
列之一是无符号的,而另一列是有符号的。 可能的解决方法是使两个列都无符号:
ALTER TABLE users MODIFY collegelinkId INT(10) UNSIGNED NOT NULL;
ALTER TABLE college MODIFY id INT(10) UNSIGNED NOT NULL;
编辑:
您在我的回答下的最新评论证明,我错了。 另一种可能性是您使用不同的数据库引擎创建了两个表。 例如,如果您使用InnoDB创建users
,但是使用MyISAM创建college
,则仍然会出现此错误。 要解决此问题,请将表上的引擎更改为相同的类型。
注意,另一种可能性是两列具有不同的排序规则。 但是,这实际上是有争议的,因为两列都是数字而不是文本。
由于列的类型相同,因此值得按照@Tim Biegeleisen的建议检查引擎类型。
更改引擎类型可解决此问题。
ALTER TABLE users
ENGINE=InnoDB;
PRIMARY KEY
除外)。 ENGINE=InnoDB
。 即使在此之后,错误150仍然可能发生。 3种解决方法:
CREATE TABLEs
不带FK的表,然后ALTER ... ADD ... FKs
CREATEs
,在短短的正确顺序。 注意:在INT(2)
, (2)
是无关紧要的。 所有INTs
均为4字节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.