2010-04-14 1 views
0

내 데이터베이스의 기존 테이블에 CSV 파일을 가져 오기위한 스크립트를 작성 중입니다. 필자는 PHP와 INSERT/UPDATE 문을 사용하여 삽입/업데이트 작업을 직접 수행하기로 결정했으며 MySQL의 LOAD INFILE 명령을 사용하지 않았습니다. 이에 대한 좋은 이유가 있습니다.MySQL에서 데이터베이스를 변경하지 않고 쿼리를 업데이트/삽입 한 결과를 미리 보시겠습니까?

내가하고 싶은 것은 삽입/업데이트 작업을 에뮬레이션하고 결과를 사용자에게 표시 한 다음이 작업이 정상임을 확인하고 데이터베이스에 변경 내용을 적용하는 옵션을 제공하는 것입니다.

트랜잭션을 지원하는 InnoDB 데이터베이스 엔진을 사용하고 있습니다. 이 방법이 도움이되었지만 삽입/업데이트, 데이터 쿼리, 사용자에게 표시, 트랜잭션 커밋 또는 롤백 중 하나를 생각해 보았는지 확신 할 수 없습니까?

모든 조언을 주시면 감사하겠습니다.

답변

5

더 쉬운 방법은 이와 비슷한 것입니다.

  1. 이 삽입 및 업데이트는
  2. 데이터
  3. 출력을 선택 할 트랜잭션을 시작
  4. 당신의 PHP 출력 버퍼 그것을 그러나 당신의 희망
  5. : 미리보기 페이지에서

    롤백

다음 확인 페이지에서 :

  1. 는 트랜잭션을 시작
  2. 버퍼 출력은
  3. 은 삽입 및 업데이트
  4. 출력 당신이 원하는
+0

아마 그렇게 할 수도 있습니다. 아무도 그 사이에있는 데이터를 수정하지 않도록기도하는 것을 잊지 마세요) – Guillaume

+0

완료 될 때까지 테이블을 잠글 수있는 방법이 있습니까? 선택을 허용해야하지만 테이블에 삽입/업데이트를 잠글 수 있다면 좋을 것입니다. – Camsoft

+0

Mysql 마법이 아닙니다. 스크립트가 완료된 후에도 PHP의 세마포어가 릴리스됩니다. 그래서 자신의 세마포어 시스템을 굴려야 할 것입니다. 행운을 빕니다. http://en.wikipedia.org/wiki/Semaphore_%28programming%29 – Arkh

0

당신은을 가져올 수 커밋 않습니다 데이터를 별도의 "가져 오기"테이블에 저장하십시오. 사용자에게 결과를 테이블 형식으로 보여줍니다. "확인"을 클릭하면 해당 데이터를 주 테이블에 복사하고 가져 오기 테이블을 삭제합니다. 그가 "취소"를 클릭하면 가져 오기 테이블을 삭제하면됩니다.

다른 사용자가 테이블을 덮어 쓰지 않도록 가져 오기 테이블 이름을 사용자별로 선택해야합니다.

PHP 가져 오기 스크립트가 완료되면 트랜잭션이 롤백되기 때문에 여기서는 트랜잭션이 도움이되지 않습니다.