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

June 3, 2010,
tags: mysql 参照整合性


このエントリーをはてなブックマークに追加

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

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

classテーブル

class_id int autor increment
class_name varchar(45)

studentテーブル

student_id int autor increment
class_class_id int
name varchar(255)
age int3

ER図

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

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

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

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

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

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

#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