【解決方法】2 つのテーブルを結合し、いずれかのテーブルに値を挿入するにはどうすればよいですか


Person テーブルと Address テーブルの 2 つのテーブルがあり、address_id は Person テーブルの外部キーとして与えられます。 ここで、これらのテーブルに参加したいのですが、人に値を挿入しようとするたびに、同じ人の住所テーブルにも住所の詳細を追加し、同時に人テーブルの Address_id を痛める必要があります。 最初に個人の詳細を挿入し、その後プロファイルを更新するときに住所の詳細のみを挿入するなど、状況を変えることができます。 この2つの条件をどうするか。

私が試したこと:

私はこれまで何も試しませんでした。 通常、Address テーブルの person_id を外部キーとして指定するため、混乱します。 しかし、ここではそうではありません。

解決策 1

できません。 アン INSERT 単一のテーブルにのみ挿入できます。

最初にアドレス テーブルに挿入する必要があります。 次に使用します LAST_INSERT_ID 挿入されたアドレスのIDを取得する (ID に自動インクリメント列を使用していると仮定します). 次に、詳細を person テーブルに挿入します。

両方の挿入ステートメントをトランザクションでラップして、両方が成功するか、両方が失敗するようにする必要があります。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 13.3.1 START TRANSACTION、COMMIT、および ROLLBACK ステートメント[^]

解決策 2

見積もり:

通常、Address テーブルの person_id を外部キーとして指定するため、混乱します。 しかし、ここではそうではありません。

リチャードが(当然のことながら)言っていることに付け加えると…

通常、アドレス テーブルに個人 ID を外部キーとして持つことはありません。通常、複数の人が同じアドレスを共有しているためであり、その逆ではありません。

Person を外部キーとして持つということは、複数の住所を持つ人を持つことができることを意味しますが、同じ住所を持つ複数の人を持つことはできません。 通常、1 人の人が一度に複数の場所にいるのではなく、家族 (または会社全体) が物理的な住所を共有するため、住所は外部キーであり、「家」の個人テーブルに個別の住所列を追加します。 、「仕事」など、必要に応じて、または「アドレス タイプ」用の別のテーブルと、人をアドレスとタイプに結合するためのリンク テーブル。

コメント

タイトルとURLをコピーしました