0

2 つの別個のテーブルが既に作成されており、情報が入力されています。最初のテーブルには、ホスト名と呼ばれる一意のフィールドがあります。各ホスト名は、2 番目のテーブルに複数のレコードを持つ場合があります。私はすでにそれらを作成しており、ホスト名は両方のテーブルに挿入されています。さて、それらをどのように接続できますか?

MySQL ワークベンチを使用しています。table2 に外部キーを作成する必要があり、このキーはホスト名である必要があります。table1に挿入する前にtable2に挿入したい場合。これは可能ですか?つまり、私のプログラムは、table1 の前に table2 の情報を挿入するように実行されます。挿入ステートメントに変更はありますか? table2 に挿入するときに、table1 について何か指定する必要はありますか?

4

2 に答える 2

1

外部キーがある場合は、常に有効なレコードを参照するか、NULLにする必要があります。table2beforeに挿入する必要がある場合はtable1、最初table2に外部キー列が NULL のレコードを挿入し、次にtable1レコードを挿入し、最後にtable2への参照でレコードを更新する必要がありtable1ます。

変な例えですが、家を建てるのと同じように考えてください。土台を作る前に現場で作ってしまうと困ります。しかし、どこかに建てて、土台を作って、その上に家を移すことはできます。

さて、余談ですが、なぜあなたがtable2前に挿入しているのか疑問に思う必要がありますtable1...

于 2012-07-14T19:16:22.030 に答える
0

FOREIGN KEY 制約は、プログラムの動作を正確に防止するために使用されます。

マスター ホスト名テーブル (テーブル 1) に存在しないホスト名値を持つ詳細レコード (テーブル 2) を作成することはできません。

アプリの動作を変更するか、2 つのテーブルを接続しないようにする必要があります。後者の場合、それらの間のデータの整合性を維持する必要があります。

詳細レコードで新しいホスト名を定期的にテストし、存在しない場合は作成する必要があります。

ログ レコードが常にテーブルに書き込まれていると思われますが、すべてのホストの情報を保持するホスト名「マスター ファイル」も必要です。

この場合 (または同様の場合)、テーブルを接続せず、ホスト名マスター ファイルを手動で維持します (つまり、実行がスケジュールされ、table1 のメンテナンスを行うストアド プロシージャを使用します)。

于 2012-07-14T19:17:23.047 に答える