我有两个MySQL表,Persons
和Addresses
。在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
答案 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 。