我有两张table, table1
是具有列的父表 ID
以及 table2
有一列 IDFromTable1
(不是真实的名字)当我放上一个fk的时候 IDFromTable1
至 ID
在 table1
我得到了错误 Foreign key constraint is incorrectly formed error
. 我想删除表2记录,如果 table1
记录被删除。谢谢你的帮助
ALTER TABLE `table2`
ADD CONSTRAINT `FK1`
FOREIGN KEY (`IDFromTable1`) REFERENCES `table1` (`ID`)
ON UPDATE CASCADE
ON DELETE CASCADE;
如果需要其他信息,请告诉我。我是mysql新手
30条答案
按热度按时间yptwkmov16#
(last resent)即使字段名和数据类型相同但排序规则不同,也会导致该问题。
例如
tbl名称 | 数据类型 | 校勘
活动ID | 内景 | 拉丁语 活动ID | 内景 | utf8\通用\ ci
试着把它改成
tbl名称 | 数据类型 | 校勘
活动ID | 内景 | 拉丁语 活动ID | 内景 | 拉丁语
....
这对我有用。
apeeds0o17#
我也有同样的问题,但解决了。
只需确保“table1”中的列“id”具有唯一索引!
当然,这两个表中'id'和'idfromtable1'列的类型、长度必须相同。但你已经知道了。
gpfsuwkq18#
尝试运行以下命令:
js4nwp5419#
我对laravel5.1迁移模式生成器和mariadb10.1有同样的问题。
问题是我打字了
unigned
而不是unsigned
(the)s
设置列时丢失了字母)。在修正了排版错误之后,我就修正了。
sg3maiej20#
检查表引擎,两个表必须是同一个引擎,这对我帮助很大。
ftf50wuq21#
这是个老主题,但我发现了一些东西。在构建mysql工作台时,它还获取另一个表的关系。只需留下与你有关的支柱。清除其他自动添加的列。这对我有用。
fxnxkyjh22#
只是为了完成。
如果外键带有varchar(..),并且引用表的字符集与引用它的表的字符集不同,则也可能出现此错误。
e、 g.拉丁1表中的varchar(50)与utf8表中的varchar(50)不同。
pokxtpni23#
显示此错误的另一个可能原因。我创建表的顺序是错误的。我试图从一个尚未创建的表中引用一个键。
z2acfund24#
我为此输了好几个小时!
一张table上的pk是
utf8
另一方面是utf8_unicode_ci
!af7jpaap25#
甚至我在mysql和liquibase上也遇到了同样的问题。这就是问题所在:要从中引用另一个表的列的表在数据类型或数据类型大小方面是不同的。
v8wbuo2f26#
如果一切都好的话,就加上
->unsigned();
结束时foregin key
.如果不起作用,请检查这两个字段的数据类型。它们一定是一样的。
nfs0ujit27#
确保列是相同的(类型相同),如果引用列不是
primary_key
,确保是INDEXED
.ctzwtxfj28#
面对这个问题的人,快跑吧
SHOW ENGINE INNODB STATUS
有关详细信息,请参阅最新的外键错误部分。dzhpxtsq29#
mysql错误文本没有太大帮助,在我的例子中,列有“notnull”约束,所以“on delete set null”是不允许的
5jdjgkvh30#
我使用的是heidisql,为了解决这个问题,我必须在引用的表中创建一个索引,引用所有列。