错误代码:1005 – 您的代码中存在错误的主键引用
通常它是由于引用FK字段不存在。可能是你有打字错误,或检查它应该是相同的,或有一个字段类型不匹配。 FK链接的字段必须完全匹配定义。
一些已知的原因可能是:
>两个关键字段类型和/或大小不完全匹配。例如,如果一个是INT(10),键字段也需要是INT(10),而不是INT(11)或TINYINT。您可能需要使用SHOW CREATE TABLE确认字段大小,因为查询浏览器有时在视觉上只显示INT(10)和INT(11)的INTEGER。您还应该检查一个不是SIGNED,另一个是UNSIGNED。他们都需要完全相同。
>您尝试引用的键字段之一没有索引和/或不是主键。如果关系中的某个字段不是主键,则必须为该字段创建索引。
>外键名称是已存在键的副本。检查外键的名称在数据库中是否是唯一的。只需在密钥名称的末尾添加一些随机字符即可测试。
>一个或两个表是MyISAM表。为了使用外键,表必须都是InnoDB。 (实际上,如果两个表都是MyISAM,那么您不会收到错误消息 – 它只是不会创建密钥。)在查询浏览器中,您可以指定表类型。
>您已指定级联ON DELETE SET NULL,但相关键字段设置为NOT NULL。您可以通过更改级联或将字段设置为允许NULL值来解决此问题。
>确保字符集和整理选项在表级别以及键列的单个字段级别相同。
>您的外键列上有一个默认值(即default = 0)
>关系中的一个字段是组合(复合)键的一部分,并且没有它自己的单独索引。即使该字段具有作为组合键一部分的索引,您必须为该键字段创建一个单独的索引,以便在约束中使用它。
>您的ALTER语句中有语法错误,或者您键入了关系中的一个字段名称
>您的外键的名称超过了64个字符的最大长度。