2

自動インクリメントの外部キーで接続された 2 つのテーブルに複数の行を挿入しようとしています。良い解決策が見つからないようです。テーブル:

  • eav_attribute_option

    • option_id (PK、オートインクリメント)
    • attribute_id
    • sort_order
  • eav_attribute_option_value

    • value_id (PK、オートインクリメント)
    • option_id (外部キー)
    • store_id
    • 価値

私はこれをしたい:

insert into eav_attribute_option(attribute_id) values(100,101,102,103,...);
insert into eav_attribute_option_value(option_id,store_id,value) values 
    (1,0,"English"),(1,1,"German"),(2,0,"English1"),(2,1,"German2")

これに対する最善のアプローチは何でしょうか。良いアプローチが見つからないようです。:

  • 次の自動インクリメントを取得してから挿入します (間にテーブルをロックする必要があります)
  • 最初の部分を挿入し、次に PK 値を取得し、2 番目の部分を作成して挿入します (しばらくデータが不完全でした。2 番目の部分でエラーが発生した場合はどうなりますか?)
  • 可能であれば、結合して挿入する方法はありますか?

編集:明確にするために、可能な限り最小限のクエリを使用しようとしています。最後に挿入されたIDを実行できることはわかっていますが、何千もの挿入でサーバーを強制終了したくありません。

4

2 に答える 2

0

次のようなことを試すことができます:

insert into eav_attribute_option (attribute_id) values(100);

insert into eav_attribute_option_value (option_id, store_id, value)
values (LAST_INSERT_ID(), 0, "English");

ただし、行を 1 つずつ挿入する必要があります。アプリケーションでループを実行することを検討してください。

于 2015-07-15T11:19:37.570 に答える