他の 2 つのテーブルの主キーを参照する 2 つの外部キーを持つテーブルを MySQL に作成しようとしていますが、errno: 150 エラーが発生し、テーブルは作成されません。作成した。
errno: 150
以下は 3 つのテーブルすべての SQL です:
ALTER TABLE ADD FOREIGN KEY: のときにエラー 150 が発生しないようにするには、これらの条件を満たす必要があります。
:
ENGINE=InnoDB をサポートする必要があります。他のストレージ エンジンは外部キー定義を黙って無視するため、エラーや警告は返されませんが、FK 制約は保存されません。
をサポートする必要があります。他のストレージ エンジンは外部キー定義を黙って無視するため、エラーや警告は返されませんが、FK 制約は保存されません。
PRIMARY KEY または UNIQUE KEY であることが最善です。
または
であることが最善です。
REFERENCES Parent(a,b,c) の場合、親の PK を (a,c,b) の順序で列に定義してはなりません。
の場合、親の PK を
の順序で列に定義してはなりません。
UNSIGNED である場合、子テーブル フィールドの対応する列に必ず UNSIGNED を定義してください。
である場合、子テーブル フィールドの対応する列に必ず
を定義してください。
VARCHAR(10) は VARCHAR(20) を参照でき、その逆も可能です。
は
を参照でき、その逆も可能です。
リーリー
TEMPORARY テーブルにすることはできません。
テーブルにすることはできません。
ON DELETE SET NULL オプションを使用して宣言されている場合、FK 列は NULL 可能である必要があります。
オプションを使用して宣言されている場合、FK 列は NULL 可能である必要があります。
SET FOREIGN_KEY_CHECKS = 0; が一貫性のない関係として誤って定義された過去の変更が原因である可能性があります。これらの問題のある FK を特定する方法については、以下の @andrewdotn の回答を参照してください。
が一貫性のない関係として誤って定義された過去の変更が原因である可能性があります。これらの問題のある FK を特定する方法については、以下の @andrewdotn の回答を参照してください。
ALTER TABLE ADD FOREIGN KEY
:
のときにエラー 150 が発生しないようにするには、これらの条件を満たす必要があります。ENGINE=InnoDB
をサポートする必要があります。他のストレージ エンジンは外部キー定義を黙って無視するため、エラーや警告は返されませんが、FK 制約は保存されません。
PRIMARY KEY
または
UNIQUE KEYであることが最善です。
REFERENCES Parent(a,b,c)
の場合、親の PK を
(a,c,b)の順序で列に定義してはなりません。
UNSIGNED
例外: 文字列の長さは異なる場合があります。たとえば、である場合、子テーブル フィールドの対応する列に必ず
UNSIGNEDを定義してください。
VARCHAR(10)
は
VARCHAR(20)を参照でき、その逆も可能です。
リーリー
これは、一致しない値をゼロ (0) 返す必要があります。明らかに、このクエリは一般的な例であるため、テーブル名と列名を置き換える必要があります。TEMPORARY
テーブルにすることはできません。
ON DELETE SET NULL
オプションを使用して宣言されている場合、FK 列は NULL 可能である必要があります。
SET FOREIGN_KEY_CHECKS = 0;
が一貫性のない関係として誤って定義された過去の変更が原因である可能性があります。これらの問題のある FK を特定する方法については、以下の @andrewdotn の回答を参照してください。