在 mysql 表上添加外键约束时出现错误 1005

Posted

技术标签:

【中文标题】在 mysql 表上添加外键约束时出现错误 1005【英文标题】:Error 1005 when adding a foreign key constraint on mysql table 【发布时间】:2011-02-18 14:14:22 【问题描述】:

我在使用南升级 django 和 mysql 应用程序时遇到问题。

我尝试使用 django sqlall 命令生成的代码进行基于 sql 的升级,但我遇到了类似的问题。

这里是sql代码:

CREATE TABLE `programmations_basissupport` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `value` numeric(6, 0) NOT NULL
)

ALTER TABLE `programmations_concert` ADD `basis_support_id` integer AFTER program_status_id;

ALTER TABLE `programmations_concert` ADD CONSTRAINT `basis_support_id_refs_id_1e4ed8d7` FOREIGN KEY (`basis_support_id`) REFERENCES `programmations_basissupport` (`id`);

添加外键约束时报错:

ERROR 1005 (HY000): Can't create table 'apidev_mnl.#sql-106e_632b00a' (errno: 150)

有人有想法吗?

更新:缺少默认值,但即使我在 django 模型中添加 default='',外键的创建也会失败。

感谢您的帮助

【问题讨论】:

看看这篇文章——***.com/questions/34579/… 谢谢。我考虑过类型不匹配,但两者都是整数(11)。 SHOW ENGINE INNODB STATUS 返回错误“拒绝访问:您需要此操作的 PROCESS 权限” 您需要以更高权限的帐户运行 SHOW ENGINE INNODB STATUS,例如 root mysql 用户,或者将 PROCESS 权限授予您正在使用的帐户。 我的主机提供商不允许访问此命令。有什么选择吗? 【参考方案1】:

看起来您正在尝试使用已存在的符号/名称添加约束。

ALTER TABLE `programmations_concert` ADD CONSTRAINT `basis_support_id_refs_id_1e4ed8d7` FOREIGN KEY (`basis_support_id`) REFERENCES `programmations_basissupport` (`id`);

可以改为:

ALTER TABLE `programmations_concert` ADD FOREIGN KEY (`basis_support_id`) REFERENCES `programmations_basissupport` (`id`);

【讨论】:

感谢您的回答。由于我提出了解决方法,这个 pb 现在离我们很远了。如果 pb 再次弹出,我会检查您的建议。最佳【参考方案2】:

同样的问题。 最后我发现在引用表中的字段是“未签名的”,但在引用表中 - 不是未签名的。

【讨论】:

【参考方案3】:

多亏了一种解决方法,我终于解决了这个问题。更改在我的开发机器上工作正常,而在主机上失败。我没有找到原因,但我成功地通过导出、迁移到我的开发机器上并重新导入来使其工作。

【讨论】:

以上是关于在 mysql 表上添加外键约束时出现错误 1005的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库的Laravel迁移“无法添加外键约束”错误

MySQL 添加表时出现“错误 1005”

有外键约束的子表插入数据时出现的错误

尝试添加外键时出现mysql错误

使用Laravel迁移创建外键时出现MySQL错误

尝试插入外键时出现错误 #1452