mysql テーブルに外部キー制約を追加するとエラー 1005 が発生する
-
26-09-2019 - |
質問
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
回避策のおかげで、最終的に問題を解決できました。変更は私の開発マシンでは正常に機能しますが、ホストでは失敗します。理由は見つかりませんでしたが、エクスポートして開発マシンに移行し、再インポートすることで機能するようになりました。
他のヒント
すでに存在するシンボル/名前を持つ制約を追加しようとしているようです。
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`);
同じ問題がありました。そして最後に、参照テーブルのフィールドは「署名されていない」が、参照テーブルでは署名されていないことがわかりました。
所属していません StackOverflow