ドクトリンビルドタスクを介してFK関係を追加することの問題
-
28-09-2019 - |
質問
私は自分のスキーマをダブルチェックしましたが、その正しい...インパクトの教義も一度それを構築しました。すべてはint(4)またはint(2)です
2 Qsここ:1。テーブルが持つことができる関係(依存関係/fks)に上限がありますか?テーブル2には最大7 fkのfksがあります。親テーブル(PK)を参照するテーブルのNOには上限がありますか? 20のテーブルに最大30のフィールドがあり、オプションの1つのID列を参照して表3を参照しています。カスケース動作の定義は必要ですか?私はそれを使用していません!
この場合、関係なく生きる方が良いですか?
エラーは次のとおりです。
SQLSTATE[HY000]: General error: 1005 Can't create table 'sokidb.#sql-268_1d' (errno: 121). Failing Query: "ALTER TABLE Acc_Gl_Accounts ADD CONSTRAINT Acc_Gl_Accounts_society_id_Soc_Societies_id FOREIGN KEY (society_id) REFERENCES Soc_Societies(id)". Failing Query: ALTER TABLE Acc_Gl_Accounts ADD CONSTRAINT Acc_Gl_Accounts_society_id_Soc_Societies_id FOREIGN KEY (society_id) REFERENCES Soc_Societies(id)
また、MySQLのクエリを直接起動しましたが、同じエラーが発生します。
解決
人々、過去数日間、私はおそらく教義に既知の問題がないことに気付きました。
私の間違いは、1つのテーブル「unsigned:true」のキーのオプションを定義し、FK定義について同じことを繰り返さなかったことでした。
また、MySQL関連のエラーをデバッグする最良の方法は、生成されたSQLスクリプトを確認することです。列の定義の違いを簡単に見つけることができます。
ジョンに感謝します。
他のヒント
おそらく、最新のMySQLバージョンのデフォルトであり、foreignkey制約エラーが発生しているInnoDBテーブルを使用している可能性があります。 ここを読んでください リクエアメントの完全なリスト。
外部キーと参照キーの対応する列は、innoDB内に同様の内部データ型を持つ必要があり、タイプ変換なしで比較できるようにする必要があります。整数タイプのサイズとサインは同じでなければなりません。文字列タイプの長さは同じではありません。非バイナリ(文字)文字列の列の場合、文字セットと照合は同じでなければなりません。