在SQL中的相关表上使用批量插入

时间:2014-06-14 11:13:26

标签: java mysql sql batch-insert

我有两个MySQL表,PersonsAddresses。在Persons表中,列id_address是具有相同名称的Addresses列的外键。 id_address中的列Addresses具有AUTO_INCREMENT ed值。因此,当我想插入新人时,我会插入将LAST_INSERT_ID()设置为新值的地址,然后将此最后一个ID用于Persons.id_address

所以我的问题是,有没有选项为这两个表设置批量插入,然后一步插入更多行?

我使用Java和MySQL驱动程序,我需要没有ORM框架。

编辑:我发现它不可能,相关答案在这里: Two different prepared statements in one single batch

1 个答案:

答案 0 :(得分:1)

如果其中一个SQL查询是SIMPLE语句,那么这两个查询都可以批量执行。

以下是一个示例

在col1中,将插入用户指定的值,并将存储last_insert_id返回的col2值。

tbl2只有一列是自动递增的,但你可以有任何no。列。唯一的限制是这个查询必须是简单的查询(即它不能准备语句)。

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