【问题标题】:keeping copy of table day by day in the database每天在数据库中保留表的副本
【发布时间】:2019-09-14 13:01:19
【问题描述】:

我想在每天 12 点将所有数据从原始表复制到重复表。如果我这样做了,那么发生的任何更改都应该反映在重复表中......就像我们添加应该添加到重复表中的新行......更重要的是,如果我们更改原始表中的任何列也应该反映在重复表中而不添加新行现有的行属性值应该改变。

@Override
public void insertDataToTableAtBegining() {

    Query itemQuery1 = entitymanager.createNativeQuery("INSERT graph_item SELECT * FROM item WHERE order_id IS NOT NULL");

    log.info("Inserting is completed where count is ZERO for item");

    itemQuery1.executeUpdate();

    Query orderQuery1 = entitymanager.createNativeQuery("INSERT graph_mrk_order SELECT * FROM mrk_order");

    log.info("Inserting is completed where count is ZERO for order");

    orderQuery1.executeUpdate();

}
@Override
public void insertDataToTable(Date beg, Date end) {

    Query itemQuery1;

    itemQuery1 = entitymanager.createNativeQuery("INSERT graph_item SELECT * FROM item WHERE create_timestamp BETWEEN '" + beg +"' AND '"+ end +"' WHERE order_id IS NOT NULL");
    log.info("Inserting is completed in Daily for item");

    itemQuery1.executeUpdate();


    Query orderQuery1;



    orderQuery1 = entitymanager.createNativeQuery("INSERT graph_mrk_order SELECT * FROM mrk_order WHERE create_timestamp BETWEEN '" + beg +"' AND '"+ end +"'");
    log.info("Inserting is completed in Daily for order");

    orderQuery1.executeUpdate();
}

【问题讨论】:

  • 与您的 DBA 交谈,让 DBA 人员处理此问题。不要从 java 代码中执行此操作。此外,您的代码很危险并且无法正常工作,永远不要使用 String concat 创建查询。
  • 如果您要尝试不断更新“重复”表并与源表保持同步,那么“每日重复”的目的是什么?就此而言,重复表的目的是什么?
  • 我们必须显示当前日期的静态图。

标签: java mysql oracle spring-boot jpa


【解决方案1】:

我建议您使用物化视图,因为它非常适合您的情况,并且您可以保证物化视图具有原始表中的所有最新行。 在这种情况下,您只需安排执行物化视图的刷新。

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 2012-12-16
    • 2012-10-30
    • 2018-09-12
    • 1970-01-01
    • 2010-11-12
    相关资源
    最近更新 更多