MySQLが外部キーを作成すると、テーブルxxx(errno:150)エラーを作成できません

一般に、この問題の原因は、作成された外部キー関連するテーブルのプライマリキータイプと一致しないことです。簡単な例を使って説明しましょう。

2つの非常に単純なテーブル、学生テーブルと教師テーブル:


 
  
  
  1. CREATE TABLE `t_teacher`
  2. ʻid` varchar 11NOT NULL
  3. `name` varchar 20DEFAULT NULL
  4. キーʻid`
  5. ENGINE = InnoDB DEFAULT CHARSET = utf8;
  6. CREATE TABLE `t_student`
  7. `id` VARCHAR 11NOT NULLとDEFAULT ''
  8. `name` varchar 20DEFAULT NULL
  9. キーʻid`
  10. ENGINE = InnoDB DEFAULT CHARSET = utf8;


次に、教師テーブルを関連付けるために、学生テーブルへの外部キーを作成する必要があります。

最初のケースは非常に単純ですが、列タイプが一致しない場合です

たとえば、intタイプの列を使用してvarchar列を関連付けます。


 
  
  
  1. ALTER TABLE `t_student`
  2. ADDの COLUMN `teacher_id` INT 11NULL AFTER NAME``
  3. 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

おすすめ

転載: blog.csdn.net/weixin_44325444/article/details/107757275