0

2 つの MySQL テーブルPersonsAddresses. Personsテーブルには、同名id_addressの列の外部キーとなる列があります。Addressesの列id_addressAddressesAUTO_INCREMENTed 値があります。したがって、新しい人を挿入したいときはLAST_INSERT_ID()、新しい値に設定するアドレスを挿入し、次にこの最後の id を使用しPersons.id_addressます。

私の質問は、これら 2 つのテーブルにバッチ挿入を設定し、1 つのステップでさらに行を挿入するオプションはありますか?

私はMySQLドライバーでJavaを使用しています.ORMフレームワークなしでこれが必要です。

編集:私はそれが不可能であることを発見しました, 関連する答えはここにあります: 1つのバッチで2つの異なる準備されたステートメント

4

1 に答える 1

1

SQL クエリの 1 つが SIMPLE ステートメントの場合、両方のクエリをバッチで実行できます。

例を次に示します。

col1 にはユーザー指定の値が挿入され、col2 には last_insert_id によって返された値が格納されます。

tbl2 には、自動インクリメントの列が 1 つしかありませんが、任意の列を使用できます。列の。唯一の制限は、このクエリは単純なクエリでなければならないことです (つまり、準備されたステートメントにすることはできません)。

PreparedStatement pStmt = conn.prepareStatement("insert into tbl1 (col1, col2) (select ?, LAST_INSERT_ID());");
int i=0;
while(i < 2) {
   pStmt.setInt(1, 20);
   pStmt.addBatch("INSERT INTO tbl2 values();");
   pStmt.addBatch();
   i++;
}
pStmt.executeBatch();

これは最初にtbl2に挿入され、続いてtbl1に挿入されます。

于 2014-08-12T13:23:29.630 に答える