InnoDBとMyISAMを混同させるときの注意点

Twitter ツイート Hatena Bookmark ブックマーク

MySQLのInnoDBで外部キー制約をMyISAMに対して行った場合、insertするとエラーになってなやまされました。
何回インサートしても外部キーが指定されてないてきなメッセージが・・・。

状況的にはこんな感じです。

classテーブル

<td>
  int autor increment
</td>
<td>
  varchar(45)
</td>

studentテーブル

<td>
  int autor increment
</td>
<td>
  int
</td>
<td>
  varchar(255)
</td>
<td>
  int3
</td>

ER図

studentテーブルが、class_class_idを元にclassテーブルを参照しているという状況です。

まずclassテーブルに1件データを入れておきます

1
insert into class (class_name) values ("情報処理科");

次にstudentテーブルにこんな感じでインサートしてみます。

1
insert into student (class_class_id,name,age) values (1,"五郎",53);

これを実行すると以下のようなエラーがでます。

1
#1452 - Cannot add or update a child row: a foreign key constraint fails (`mydb/student`, CONSTRAINT `fk_student_class` FOREIGN KEY (`class_class_id`) REFERENCES `class` (`class_id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

すげー悩んだんですが、どうやら原因は外部キーに設定しているテーブルがMyISAMだったからのようです。
よく考えたら、MyISAMは参照整合性をサポートしていないのでエラーがでて当然です・・・。

MySQL WorkbenchでInnoDBとMyISAMで外部キー設定したら警告ぐらい出てもくれてもいいのになーとか思ったりして・・・w

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。