mysql外键定义不正确,关于sql:mysql外键约束格式错误

我有两个表,table1是具有列ID的父表,而table2是具有列IDFromTable1的父表(不是实际名称),当我在IDFromTable1中将FK放在table1中的ID上时 >我收到错误Foreign key constraint is incorrectly formed error。 如果要删除table1记录,我想删除表2记录。 谢谢你的帮助

让我知道是否需要其他信息。 我是mysql新手

您的表使用什么引擎? table2.IDFromTable1和table1.ID的类型是什么?

另外,检查两个表的字符集是否相同。

两个表引擎都是innoDB。 不知道在哪里可以找到字符集,并且都是字符类型。 该ID是table1中的主键

请提供表1和表2的表定义。 您是怎么得到这个错误的? 您是否使用工具来创建外键? 看来这不是MySQL本机错误。

@ user516883-您需要帮助来获取表定义吗? 在HeidiSQL中,您只需单击"创建代码"选项卡。

...以及表定义呢? 运行SHOW CREATE TABLE table1,然后运行table2

我在HeidiSQL中遇到了同样的问题。您收到的错误非常神秘。我的问题最终是外键列和引用列的类型或长度不同。

外键列为SMALLINT(5) UNSIGNED,引用列为INT(10) UNSIGNED。一旦将它们设置为完全相同的类型,外键创建就可以完美地工作了。

或者可能是引用的列不是主键

我有点类似的问题-引用的表还不存在。哎呀

Ive完全体验了Jake所做的事情,但是Ive在HeidiSQL上遇到了另一个FK问题(不同类型)。 varchars上的FK必须是相同的排序规则。希望以后能对别人有所帮助!

此外,对于HeidiSQL,您也可能忘记了在引用表中设置主键,该主键应该是外键。

[哑模式打开]如果将FK字段设置为在已填充的表上具有NOT NULL,则MySQL将填充0值...并且当您尝试添加约束时,它当然会失败,因为您没有引用记录PK = 0 ...

要添加到@Amalgovinus-它不会告诉您所引用的表是否不存在,它只是对您说"外键约束的格式不正确"。

就我而言,这是因为编码和排序规则不同。

6年后,您的答案仍然有效。

@nawfal-我认为它不一定必须是主键,但必须具有索引。主键自动获得索引。

是的,我的签名/无符号整数类型不匹配。

没有人提到分区。如果您的FK是同时也是分区键的PK,它将产生此错误。

此评论对我有所帮助。在我的情况下,这是因为针对由" varchar(36)DEFAULT NULL"定义的外键使用了不同的编码" varchar(36)COLLATE utf8mb4_general_ci DEFAULT NULL"(由休眠生成)。

同样使用HeidiSQL,通过更改FK的名称来解决。他们必须是独一无二的!

对我来说,它在一个表中是ID INT(5)UNSIGNED NOT NULL,被用户ID INT(5)引用。刚刚添加了UNSIGNED NOT NULL,它就像一个魅力:)

使用MyISAM引擎创建父表时,我遇到了同样的问题。我解决了一个愚蠢的错误:

确保列是相同的(相同类型),并且如果引用列不是primary_key,请确保它是INDEXED。

甚至发生在我身上的是,没有错误,但是没有添加外键(实际上是1,没有1),但是在添加简单的KEY refer

你可能感兴趣的:(mysql外键定义不正确)