2010-05-12 144 views
2

我在升级django和mysql应用程序时出现问题。在mysql表中添加外键约束时出现错误1005

我试着用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 ='',创建外键失败。

感谢您的帮助

+0

退房这个职位 - http://stackoverflow.com/questions/34579/mysql-error-1005-when-adding-tables – 0x2D9A3 2010-05-12 11:52:28

+0

感谢。我想过类型不匹配,但都是整数(11)。 SHOW ENGINE INNODB STATUS返回一个错误'拒绝访问:您需要此操作的PROCESS权限' – luc 2010-05-12 12:17:30

+0

您需要运行SHOW ENGINE INNODB STATUS作为更具特权的帐户,例如root用户,否则将PROCESS权限授予您正在使用的帐户。 – 2010-05-12 15:11:54

回答

1

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

+0

你还记得解决方法是什么吗? – Brian 2013-07-26 20:43:08

2

还有同样的问题。 最后我发现在引用表字段中是“无符号”,但在引用表中 - 没有未签名。

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

感谢您的回答。现在由于我提出的解决方法,这个pb很远。如果pb再次弹出,我会检查你的建议。最好 – luc 2010-10-07 07:04:47

相关问题