2016-04-30 6 views
0

私は非常にMySQL初心者です。ちょうど2,3日前に始まったばかりです。私の宿題のために、MySQLは単純化のためMyISAMにデフォルト設定されており、私はMySQLでの練習のための病院のサンプルデータベースを作成しました。MySQLの子(Tb1)の親(Tb2)でもある親テーブル(Tb2)の子テーブル(Tb1)にデータを挿入する方法は?

私自身の目的で、InnoDBがMyISAMと比較して実際にFKを強制するいくつかの調査では、デフォルトのInnoDBに切り替えて、MyISAMで宿題と同じデータベースを再作成しようとしました。

そして問題は、私の「病棟」テーブルは以下の通りです、トラックのように私をフラフラ:

create table Ward 
(Code varchar(1) primary key not null, 
Name varchar(15) not null, 
Consultant varchar(3) not null); 

alter table ward 
add foreign key (Consultant) 
references Doctor(ID); 

と私の医師テーブルはこのように書き:この後

create table Doctor 
(ID varchar(3) primary key not null, 
Name varchar(15) not null, 
Ward varchar(1) not null); 

alter table doctor 
add foreign key (Ward) 
references Ward(Code); 

、私が試しましたどちらかのテーブルにデータを入力すると、「病棟」テーブルと「医師」テーブルにそれぞれデータを入力しようとすると、次のエラーが表示されました。

エラー1452(23000):子行を追加または更新できません:外部キー の制約が失敗します(hospital)。 ward、CONSTRAINT ward_ibfk_1 FOREIGN KEY(Consultant)がdoctorID)を参照)

ERROR 1452(23000):子行を追加または更新できません:外部キー 制約が失敗した(hospitaldoctor、CONSTRAINT doctor_ibfk_1 FOREIGN KEY。 (Wardは)私はテーブルのいずれかにデータを入力するにはどうすればよいwardCode))

を参照していますか?

ありがとうございました。

答えて

0

FKがそのように前後しているのはおそらく「間違っている」でしょう。

テーブルの作成中に外部キーを無効にすることができます。しかし、あなたはインサートに問題があるかもしれません - インサート1つはあなたがまだもう1つをやっていないので、FK違反を見つけるでしょう。

FKにループがない場合は、単に「正しい」順序でテーブルを作成します。

+0

答えをいただきありがとうございます。私はそのようにします。 しかし、余分な情報については、実生活のようなFKループがありますか?出来ますか? – Tomm

+0

私は分かりません。私は「外国の鍵」を使用しません。代わりに私はインデックスを使用し、私のコードで "外部キー制約"に違反しないことを確認します。 –

関連する問題