【问题标题】:Executing multiple sql statements batch concerns?执行多个sql语句批处理问题?
【发布时间】:2015-10-25 00:05:09
【问题描述】:

我正在使用 Java 中的 mysql。

基本上,我有多个查询,每个查询都在数据库中创建一个表,还有一个 ALTER 语句调整我的一个属性的自动增量初始值。我将这些查询作为事务执行——即要么全部提交到数据库,要么没有。但为此,我为每个查询创建了一个单独的 Statement - 总共 8 个 - 并执行每个查询。之后,我提交所有结果。然后我必须关闭每个Statement

但这似乎效率低下。对许多Statements。所以我想知道批处理方法是否可行。我担心的是批处理方法同时执行所有查询,因为我有Referential Integrity ConstraintsALTER 查询,所以表之间存在依赖关系——因此它们的创建顺序很重要。这不正确吗?我是否误解了批处理语句的工作原理?

如果我上面的逻辑是正确的,那么我是否应该将几个查询组合在一起(不相关的)并使用批处理方法来执行它们。这将减少我拥有的Statements 的数量。

【问题讨论】:

  • 在 MySQL 中,您可能只需要 use a single Statement 并传递一个包含所有 SQL 语句的字符串,并用分号 (;) 分隔。你试过这个吗?此外,所有 DDL 语句 cause an implicit commit,因此在单独的事务中执行它们并不重要。
  • 单个语句的问题在于可读性,因为我创建了大约 7 个表,每个表包含大约 7-12 个属性,此外还有检查、外键和主键。

标签: java mysql database batch-processing


【解决方案1】:

我认为您不能批量处理 DDL(即 createdropalter)。此外,就性能而言,要求动态 DDL 也不是一个好主意。

您可以使用Statement.addBatch(String) 批处理DML 语句(即选择插入更新删除 语句),然后调用Statement.executeBatch()

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 2014-10-23
    • 2017-05-13
    相关资源
    最近更新 更多