表行似乎正在消失

时间:2014-10-03 08:08:56

标签: java mysql sql heidisql

我有大量的原始html文件,我通过Java连接解析并插入MySQL数据库。

我正在使用" REPLACE INTO"陈述和这种方法:

public void migrate(SomeThread thread) throws Exception{
    PreparedStatement threadStatement = SQL.prepareStatement(threadQuery);
    thread.prepareThreadStatement(threadStatement);
    threadStatement.executeUpdate();
    threadStatement.close();

    for(SomeThread.Post P : thread.threadPosts){
        PreparedStatement postStatement = SQL.prepareStatement(postQuery);
        P.preparePostStatement(postStatement);
        postStatement.executeUpdate();
        postStatement.close();
    }
}

我在自己的命令提示符下运行我的程序的3个独立实例,并使用各自独立的htmls目录进行解析和提交。

我正在使用HeidiSQL来监控数据库,并且发生了一件有趣的事情,例如,我会在一个表中看到我有500,000行,然后我将关闭HeidiSQL和稍后再回来查看我现在有440,000行。我使用的两个表格也是如此。

我的两个表都使用名为" id"的主键,他们的每个ID都有自己的域,但是它们的值可能会重叠并相互覆盖?我不确定这是否是一个问题,因为我认为SQL可以区分表格"本地" id值。

否则我认为可能是因为我运行了3个独立的实例,每个实例都与数据库建立了连接,所以当某一行被提交,执行交换到另一个时,会发生某种魔术。 commit语句,替换表,然后返回第一个提交,然后是一些魔法导致数据库回滚收集的行数。

我对SQL很陌生,所以我不太清楚从哪里开始,如果有人知道到底发生了什么,可能会指出我正确的方向我会真的很感激。

由于

2 个答案:

答案 0 :(得分:0)

您可能希望使用INSERT INTO代替REPLACE INTO。 数据不会消失。

以下是一些提示:

  • 您是否正在运行另一个实际删除条目的线程?
  • 其他人是否可以访问数据库?

不确定HeidiSQL可能会做什么。要排除这种可能性,可以改用MySQL Workbench。

答案 1 :(得分:0)

是的,现在我对我的表运行COUNT(*)查询,我发现我的所有行都在那里。

heidiSQL摘要页面很可能只是一个非常粗略的估计。

感谢您使用workbench pete的建议,我会尝试一下,看看它是否比Heidi好,因为Heidi定期冻结我。