2

デフォルトのエンジン(MyIsam)を使用して、次の構文で外部キーを作成できます。

alter table `codes` add constraint foreign key(`associated_code_id`) references ask_codes(code_id)  on update cascade on delete cascade;

ただし、INNODBを使用してテーブルを作成すると、外部キーを作成できなくなります(mysqlからエラー1005(HY000):テーブル'my_table。#sql-3311_16115'(errno:150)を作成できません)。

これは構文の問題ですか?助けてくれてありがとう、

4

4 に答える 4

6

問題は、両方の列のタイプが同じではないことです。正確には一致しません。

ドロップされたテーブルを再作成する場合は、それを参照する外部キー制約に準拠する定義が必要です。前述のように、正しい列名とタイプが必要であり、参照されるキーにインデックスが付いている必要があります。これらが満たされない場合、MySQLはエラー番号1005を返し、エラーメッセージでエラー150を参照します。

于 2012-04-11T15:23:35.660 に答える
1

@phpGeekのすばらしい答えに加えて、数値にも同じLENGTHが必要です。つまり、テーブルAに「idINT(11)」がある場合、テーブルBにも「A_idINT(11)」が必要です。

于 2013-10-01T17:41:50.470 に答える
0

MyISAMテーブルに対してALTERステートメントを実行すると、私が正しく覚えていれば、FK制約を黙って無視します。InnoDBで実行すると、テーブルに適用して制約を検証しようとします。このエラーは、既存の行のFK制約が失敗した場合に発生すると思います-InnoDBエラーコード

次のクエリを試して、制約の作成をブロックしている値を確認できます-

SELECT *
FROM codes
LEFT JOIN ask_codes
    ON codes.associated_code_id = ask_codes.code_id
WHERE ask_codes.code_id IS NULL
于 2012-04-11T14:58:37.963 に答える
-6

これは単にInnoDBの制限だと思います。外部キーはサポートしていません。少なくとも、前回この問題が発生したときに、この問題から離れた方法です。

于 2012-04-11T14:54:01.913 に答える