0

Java の接続を介して解析し、MySQL データベースに挿入する生の html ファイルが大量にあります。

「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 つの個別のインスタンスをそれぞれ独自のコマンド プロンプトで実行しており、解析およびコミットする html の個別のディレクトリを使用しています。

私は HeidiSQL を使用してデータベースを監視していますが、たとえば、ある時点でテーブルに 500,000 行あることがわかり、HeidiSQL を閉じて後でもう一度チェックして、 440,000 行。私が使用している 2 つのテーブルでも同じことが起こります。

私のテーブルは両方とも「id」と呼ばれる主キーを使用しており、それぞれの ID には独自のドメインがありますが、値が重複して互いに上書きしている可能性はありますか? SQLはテーブルの「ローカル」ID値を区別すると思うので、これが問題になるかどうかはわかりません。

それ以外の場合、それぞれがDBに接続している3つの個別のインスタンスを実行しているため、1つの行がコミットされているときに何らかの魔法が発生し、実行が別のコミットステートメントにスワップし、テーブル、次に最初のコミットに戻り、データベースに収集された行数をロールバックさせるいくつかの魔法を実行します。

私はSQLにかなり慣れていないので、どこから始めればよいかわかりません.誰かが一体何が起こっているのかについての考えを持っていて、私を正しい方向に向けることができれば、本当に感謝しています.

ありがとう

4

2 に答える 2

0

INSERT INTOの代わりに使用したい場合がありREPLACE INTOます。データは消えません。

いくつかのヒントを次に示します。

  • 実際にエントリを削除する別のスレッドを実行していますか?
  • 他の人はデータベースにアクセスできますか?

HeidiSQL が何をするかわからない。その可能性を排除するには、代わりに MySQL Workbench を使用してください。

于 2014-10-03T08:18:19.243 に答える