2010-08-15 4 views
1

테이블 1 개와 테이블 1 개가 '사용자'와 '계정'으로 구성되어 있습니다.이중 키 업데이트가있는 MySQL 내장 INSERT

계정은 FK의 USER_ID을 가지고 있으며, 계정은 고유 ACCOUNT_ID있다

나는 최대 50,000 개의 행과 중 각 행에 대한 CSV 업로드를 가지고 가야 :

  • 새로운 행으로 데이터를 삽입 account.account_number가 고유 한 경우 account.account_number가 고유 한 경우
  • account.account_number가 이미 존재하는 경우 계정 테이블 행을 업데이트하십시오.
  • account.account_number가 csv에 존재하지 않으면 계정과 사용자 행을 제거하십시오.

지금까지 account.account_number col이 고유한지 확인하기 위해 계정 테이블을 다루고 있지만이 테이블에 새 행을 추가하려면 이미 추가 된 새 행의 user_id가 필요합니다. 사용자 테이블

INSERT INTO account (account_number, trans_rate....etc) VALUES (multiple data sets),(...),(....) ON DUPLICATE KEY UPDATE ...etc 

그래서 계정 테이블을 처리하므로 필요에 따라 업데이트/삽입합니다. 물론 user_id 열은 사용자 레코드가 작성되지 않았으므로 NULL로 남습니다.

위의 문장 내에 새 사용자 행에 대한 insert 문을 포함시킬 수 있는지 궁금하지만 어디서부터 시작해야할지 모르겠다 ... 그리고 실제로 인터넷 검색은 실제로 가능하다는 사실을 깨닫게했다. 지금까지.

또는 다른 어떤 아이디어? ..

내가 한 줄에 여러 쿼리이 작업을 수행하는 방법을 볼 수 있습니다,하지만 난 데이터 가져 오기 내가 너무 많은 함께 할 경우 걸릴 것입니다 시간에 대한 걱정 별도의 쿼리.

+0

기존 행을 모두 삭제 한 다음 CSV 파일의 데이터를 기반으로 다시 삽입 할 수 있습니까? –

+0

사용자가 계정 테이블에 저장된 추가 정보를 제출하기 때문에 불행히도 아닙니다. – petesiss

답변

1

데이터를 '스테이징 테이블'로 업로드 한 다음 처음 두 개의 업셋을 사용자 테이블로 이동하고 두 번째 계정 테이블을 사용합니다. 두 번째로 사용되는 쿼리는 사용자 테이블에 조인 된 스테이징 테이블입니다. 예 사용자 이름 또는 SSN (사용자의 후보 키가 무엇이든).

+0

흠. 재미있는 아이디어. 나는 그것을 줄 수도 있습니다. 건배. – petesiss