2010-05-12 136 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

相關問題