テーブルxxx(errno:150)エラーソリューションを作成できません
一般に、この問題の原因は、作成された外部キーが関連するテーブルのプライマリキータイプと一致しないことです。簡単な例を使って説明しましょう。
2つの非常に単純なテーブル、学生テーブルと教師テーブル:
-
CREATE
TABLE
`t_teacher`
(
-
ʻid`
varchar
(11)NOT NULL、
-
`name`
varchar
(20)DEFAULT NULL、
-
主キー(ʻid`)
-
)ENGINE = InnoDB DEFAULT CHARSET = utf8;
-
-
CREATE
TABLE
`t_student`
(
-
`id`
VARCHAR
(11)NOT NULLとDEFAULT '' 、
-
`name`
varchar
(20)DEFAULT NULL、
-
主キー(ʻid`)
-
)ENGINE = InnoDB DEFAULT CHARSET = utf8;
次に、教師テーブルを関連付けるために、学生テーブルへの外部キーを作成する必要があります。
最初のケースは非常に単純ですが、列タイプが一致しない場合です
たとえば、intタイプの列を使用してvarchar列を関連付けます。
-
ALTER
TABLE
`t_student`
-
ADDの
COLUMN
`teacher_id`
INT
(11)NULL AFTER NAME`` 。
-
-
ALTER
TABLE
`t_student`
のADD
CONSTRAINT
` teacher_id_fk`
FOREIGN
KEY
(`teacher_id`)REFERENCES ` t_teacher`(`id`)ON DELETE RESTRICT ON UPDATEがRESTRICT。
別のケースでは、データタイプは同じですが、文字エンコーディングに一貫性がありません
例えば:
最後のケースは、外部キーによって参照されている列が見つからない場合です。
外部キーを追加する場合、列データ(履歴データ、またはデータベーステーブルの更新時に設定されたデフォルト値)が既に存在する場合がありますが、これらのデータは必ずしも外部キー関連付けテーブルで対応する行レコードを見つけるとは限りません。この状況では、外部キーの作成も失敗します。
継続的に更新しています...
記事参照学習アドレス:https://blog.csdn.net/imhuqiao/article/details/51432051