• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQL5.1 で外部キーの動作を検証する方法?)

MySQL5.1で外部キーの動作を検証する方法

このQ&Aのポイント
  • MySQL 5.1で外部キーの設定が反映されない問題について
  • 親テーブルの更新が子テーブルに反映されない原因と対策
  • MySQL 5.1で外部キーの動作を検証する方法

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

いくつか間違いというか、誤解があるようです。 (1)MySQLでの外部キー制約は、InnoDBのみ  →MySQLの実装上の制限 (2)子の外部キーは、親のprimary key(ユニークなキー)  →そうでないなら、親を一意に決められない まず、子のtes2表は、InnoDBになっていないのでは? show table status like 'tes%'; show create table tes2; で確認できます。明示指定しないと、MyISAMが過程されるはずです。 次に、tes1表のt1_col2は、主キーになっていません。 以下に定義&テスト例を貼り付けておきます。 -- 存在したら削除 drop table if exists tes2; -- 削除等は、子の表を先に! drop table if exists tes1; -- 表の定義 create table tes1 (t1_col1 int (4), t1_col2 varchar (10), primary key (t1_col2) -- 変更 ) engine=innodb; create table tes2 (t2_col1 int (4), t2_col2 varchar (10), t1_col2 varchar (10), primary key (t2_col1), foreign key (t1_col2) references tes1(t1_col2) -- 対応列の明示指定 on update cascade ) engine=innodb; -- 追加 -- 定義内容確認 show table status like 'tes%'; show create table tes2; -- テストデータ格納(親) insert into tes1 values (1,'upd1'), (2,'upd2'); -- テストデータ格納(子) insert into tes2 values (1,'line11','upd1'), (2,'line22','upd2'); -- 外部キー制約のテスト -- 親の主キー更新 update tes1 set t1_col2='upd11' where t1_col2='upd1'; -- 子の外部キーも更新されていることを確認 select * from tes1; select * from tes2;

laser-disc
質問者

お礼

レスが遅くなりまして(^^;)。社会人が通信で『コソ勉』です。丁寧にタグまで頂いて…!有り難うございます!! そして、動作ですが…むむ、ちゃんと動きます。自分がやると半日調べたり試したり、ブラウザのタブがぎっしりになるまで色々見てやってもダメだったのに(泣)なんでだー!<経験と脳力 悲しいくらいサクサク動きます…。分かっている人がやるとこうも違う物なんですかね。勝手ながら師匠と仰がせて頂きます。orz でも、おかげさまで肝心の課題制作に入れます。なるべく自力で!とは思うのですが、いかんせん毎週締め切りがあるので、時間が足りなくなってはgooに泣きつくのがパターン化しつつあります。このたびは助けて頂き、有り難うございました。m(_ _)m れざ

関連するQ&A