【问题标题】:Error 1005 when adding a foreign key constraint on mysql table在 mysql 表上添加外键约束时出现错误 1005
【发布时间】: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='',外键的创建也会失败。

感谢您的帮助

【问题讨论】:

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

标签: mysql django foreign-keys mysql-error-1005


【解决方案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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      相关资源
      最近更新 更多