2014-10-03 3 views
0

Java에서 연결을 통해 MySQL 데이터베이스에 파싱하고 삽입하는 원시 HTML 파일이 있습니다. 내가 문 "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 값을 구별 할 것이기 때문에 이것이 문제가 될 수 있는지 확실하지 않습니다.

그렇지 않으면 DB에 연결되어있는 3 개의 개별 인스턴스를 실행 중이므로 하나의 행이 커밋되고 실행이 다른 커밋으로 바뀌는 마법 같은 일이 발생한다고 생각했습니다. 명령문을 사용하여 테이블을 옮긴 다음 첫 번째 커밋으로 돌아간 다음 데이터베이스가 수집 된 행 수를 롤백하도록하는 마법을 다시 발생시킵니다.

저는 SQL을 처음 접했을 때 누군가가 도대체 ​​무슨 일이 일어나고 있는지에 대한 아이디어를 갖고 있고 올바른 방향으로 나를 가리킬 수 있다면 정말 고맙겠습니다.

감사

답변

0

당신은 INSERT INTO 대신 REPLACE INTO 사용할 수도 있습니다. 데이터가 사라지지 않습니다.

여기에 몇 가지 도움말입니다 :

  • 당신은 실제로 항목을 삭제 다른 스레드 실행이 있습니까?
  • 다른 사용자가 데이터베이스에 액세스 할 수 있습니까?

HeidiSQL이 수행 할 수있는 작업이 확실하지 않습니다. 그 가능성을 배제하기 위해 대신 MySQL Workbench를 사용하십시오.

0

이제 테이블에 대해 COUNT (*) 쿼리를 실행 했으므로 모든 행이 실제로 표시됩니다.

아마도 heidiSQL 요약 페이지는 매우 대략적인 추정 일뿐입니다.

워크 벤치 피트를 사용 해준 제안에 감사 드리며, 하이디보다 하이디보다 나은지를 정기적으로 확인합니다.

관련 문제