在 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的主要内容,如果未能解决你的问题,请参考以下文章