【问题标题】:Using batch insert on related tables in SQL在 SQL 中对相关表使用批量插入
【发布时间】:2014-06-14 11:13:25
【问题描述】:

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

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

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

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

【问题讨论】:

  • 可能定义一个触发器会有帮助吗?
  • 我不这么认为,我虽然用一个 PreparedStatement.execute() 来处理一个命令,但我发现这是不可能的。

标签: java mysql sql batch-insert


【解决方案1】:

如果其中一个 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

【讨论】:

    猜你喜欢
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2014-10-14
    相关资源
    最近更新 更多