2017-11-01 7 views
-1

私はこの質問を複数回書き直そうとしましたが、質問する方法を理解できないようです。私は過去2時間にわたり研究してきました。私が間違ったことを探しているのかどうかはわかりません。私は外部キー(https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html)のMYSQLのドキュメントを読んだ。私の理解から、外部キーは主キーを指し、外部キー値は主キー値を複製する必要があります。これは、そうでなければ重複する可能性がある情報を格納するのに役立ちます。外部キー値をプライマリキー値と同じにするにはどうすればよいですか?

これを私のmysqlテーブルに適用しようとすると、私の最初のテーブルの主キーを指し示す2番目のテーブルに外部キー制約を追加します。私の2番目のテーブルにあるものはすべて、学習のためにヌル可能です。
最初のテーブルにクエリを入力すると、プライマリキーが自動的にインクリメントされますが、(2番目のテーブルの)外部キーの値はプライマリキーをレプリケートするように更新されません。

プライマリキーとの外部キーの関係が無効であるか正しく動作していないのか、または外部からの場合に最初のテーブルプライマリを複製するために2番目のテーブルの挿入コマンドを手動でクエリする必要があるか外部キーは主キーの値を自動的に複製しません。その場合、値をリンクする必要がないか、同じである必要がある場合、主キーと外部キーのポイントは何ですか?私は本当に欲求不満だと私は奇妙な気がするので、私はキーの関係をさまざまなソースから複数のページを読んだ後に理解していない。

+0

2番目のテーブル(外部キー)のレコードは、自動的に作成されないものとします。 2番目のテーブルにもレコードを追加するコードを記述する必要があります。外部キー制約は、オーファンレコードを作成しないようにするためです。つまり、データの整合性が維持されます。 – Sparrow

答えて

0

PRIMARY KEY - FOREIGN KEYは、テーブル間の関係を作成する方法です。学生、コース、クラスの表を考えてみましょう。簡単のために、

Student(StudentId, StudentName) 
Course(CourseId, CourseName) 
Class(ClassId, CourseId, StudentId) 

この場合、クラステーブルには、学生とコーステーブルを参照する外部キーがあります。新しい生徒および/またはコースを追加することはできますが、生徒はクラスに登録できないため、クラステーブルに自動的に追加されません。コースには、教授する指導者がいないため、すぐにクラスがないかもしれません。

クラスには学生とコースが必要です。これは関係が有用な場所です。学生がクラスに追加される前に、学生テーブルに存在する必要があります。クラスが存在する前にコースが存在していなければなりません。

0

最初のテーブルに行を追加すると常に2番目のテーブルに対応する行が追加されるため、最初のテーブルでAFTER INSERTトリガを使用することができます。 NEW.idを使用して、新しい行に割り当てられたIDを取得し、2番目の表でINSERTを実行して、その行を外部キーとしてそこに作成することができます。

関連する問題