リレーショナル データベースでは、多くの場合、複数のテーブルのデータを同時に変更する必要があります。別の INSERT ステートメントを使用することもできますが、このアプローチは非効率的でエラーが発生しやすくなります。
質問:
データベースに 3 つのテーブル (Object_Table、Data_Table、Link_Table) が含まれているとします。目的は、特定のオブジェクト識別子に関連付けられたデータを Data_Table からコピーし、対応するレコードを Data_Table と Link_Table に挿入することですが、そのレコードは異なるオブジェクト識別子を持ちます。これは、反復ごとに 1 つのループと 2 つの INSERT ステートメントを使用して実現できますが、より良い解決策は、コードの量と潜在的なエラーを最小限に抑えることです。
最良の解決策:
1 つのトランザクションで複数のテーブルにデータを挿入するには、マルチテーブル挿入を使用できます。この方法により、原子性と効率が保証されます。次のコード スニペットは、このアプローチを示しています。
<code class="language-sql">BEGIN TRANSACTION; DECLARE @DataID int; INSERT INTO DataTable (Column1 ...) VALUES (....); SELECT @DataID = scope_identity(); INSERT INTO LinkTable (ObjectID, DataID) VALUES (@ObjectID, @DataID); COMMIT;</code>
コードの説明:
BEGIN TRANSACTION
ステートメントはトランザクションの開始を示します。 INSERT
ステートメントは、Data_Table にレコードを挿入し、新しく挿入された行の識別子 (@DataID) を返します。 INSERT
ステートメントは、取得した識別子を使用して、Data_Table 内の新しい行を Link_Table で指定されたオブジェクトに関連付けます。 COMMIT
ステートメントはトランザクションを完了し、両方の挿入操作が成功するか、両方とも失敗することを保証します。 このソリューションにはループや一時テーブルが必要ないため、コードがより簡潔かつ効率的になります。さらに、2 つの挿入操作が作業単位として機能することを保証することで、アトミック性を提供します。
以上が複数のデータベーステーブルに同時に効率的にデータを挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。