繁体   English   中英

MySQL 5.5 errno:150“外键约束格式不正确”

[英]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种解决方法:

  • 创建表时禁用FK,然后重新启用。
  • CREATE TABLEs不带FK的表,然后ALTER ... ADD ... FKs
  • 要确保做到CREATEs ,在短短的正确顺序。

注意:在INT(2)(2)是无关紧要的。 所有INTs均为4字节。

Laravel 6

[英]MySQL (errno: 150 “Foreign key constraint is incorrectly formed”)") on Laravel 6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM