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

时间:2010-05-12 11:47:17

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

使用south升级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`);

添加FK约束时会引发错误:

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

有人有想法吗?

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

感谢您的帮助

3 个答案:

答案 0 :(得分:3)

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

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`);

答案 1 :(得分:2)

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

答案 2 :(得分:1)

由于解决方法,我终于解决了问题。在我的开发机器上,当它在主机上失败时,alter工作正常。我没有找到原因,但我成功通过导出,在我的开发机器上迁移并重新导入来实现它。