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