在SQL中对相关表使用批处理插入



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

所以我的问题是,是否有任何选项来设置这两个表的批量插入,然后在一步中插入更多行?

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

EDIT:我发现这是不可能的,相关答案在这里:在单个批处理中使用两个不同的预处理语句

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

下面是一个例子:

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

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

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

相关内容

  • 没有找到相关文章

最新更新