我有大量的原始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很陌生,所以我不太清楚从哪里开始,如果有人知道到底发生了什么,可能会指出我正确的方向我会真的很感激。
由于
答案 0 :(得分:0)
您可能希望使用INSERT INTO
代替REPLACE INTO
。
数据不会消失。
以下是一些提示:
不确定HeidiSQL可能会做什么。要排除这种可能性,可以改用MySQL Workbench。
答案 1 :(得分:0)
是的,现在我对我的表运行COUNT(*)查询,我发现我的所有行都在那里。
heidiSQL摘要页面很可能只是一个非常粗略的估计。
感谢您使用workbench pete的建议,我会尝试一下,看看它是否比Heidi好,因为Heidi定期冻结我。