0

複数のテーブルに一連の DB 挿入を行う PHP プログラムがあります。

挿入を別の DB に挿入できるように、プログラムが挿入の SQL ダンプを生成するという要件が発生しました。(この 2 番目のデータベースのスキーマは同じですが、データは異なります)。

SQL ダンプの生成は簡単です。クエリ文字列を実行時に出力するだけです。

ただし、相互参照 ID フィールドを使用して複数のテーブルに挿入を行っているため、この方法で生成された SQL には、外部キー フィールドの固定 ID 値が含まれています。

つまり、ダンプ ファイルのサンプルは次のようになります。

insert into tableA  ....
insert into tableB  .... id_a = 365 ....
insert into tableC  .... id_b = 1895, id_a = 365 ....

...ここで、「365」と「1895」は$mysqli->insert_id、前のテーブルに挿入されたレコードの ID を取得するために PHP 呼び出しによってクエリに入力されます。

したがって、これは、データを DB に挿入するために実行されたクエリの正確な図を表しています。

問題は、SQL ダンプが 2 番目のデータベースで実行されるときに、これらの固定 ID 値が明らかに正しくないことです。最初のレコードが 2 番目の DB の tableA に挿入されると、結果のレコードの ID は 365 になりません。したがって、その後の tableB と tableC への挿入にはその ID への固定参照が含まれているため、外部キーが指している状態で挿入されます。間違ったレコードに。

どうすればこの問題を解決できますか?

ID を固定せずに、同じクエリ ダンプ内の他の挿入を参照するこのタイプの SQL ダンプを生成する方法はありますか?

助けてくれてありがとう。

4

1 に答える 1

0

最初にデータを挿入してから、参照制約 ALTER TABLE を作成してみてください。エラーの後でもテーブルにデータを挿入し続ける INSERT IGNORE があります。したがって、競合する値のみがテーブルに入力されません。

于 2012-10-16T14:08:50.383 に答える