편집 : 나는 키가 독특한에서 데이터베이스 것을 당신의 문을 오해 생각합니다. 이 경우 이미 대상 데이터베이스에있는 경우 원본 데이터베이스의 행을 삽입하지 않습니다. 그런 다음 동일한 외래 키를 사용하여 외래 키 테이블에 여전히 복사 할 수 있습니다. 단지의 경우 아래의 오래된 대답을 떠나
INSERT INTO MainTable (PK, field1, field2)
SELECT (PK, field1, field2)
FROM OldMainTable
WHERE PK NOT IN (SELECT PK FROM MainTable)
:
그래서 기본적으로
.
가장 좋은 방법은 OldPrimaryKey 필드를 가지고 테이블을 수정하는 것입니다. 그런 다음 대상 데이터베이스에 데이터를 삽입 할 때 원본 PK를 OldPrimaryKey 필드에 저장하십시오. 당신이 외래 키와 아무것도 삽입 할 때 다음, OldPrimaryKey 필드까지 FK에 맞는 모양과 일치하는 외부 키를 업데이트합니다.
는 SO 쿼리가 같은 것을 볼 수있다 (! 아마 좋은 생각은 경우뿐만 아니라 외부 키의 복사본을 생성하기 위해) :
INSERT INTO MainTableTarget (OldPrimaryKey, field1, field2...)
SELECT PrimaryKey as OldPrimaryKey, field1, field2...
FROM OldMainTable
INSERT INTO Table2Target (OldTable2PK, MainTableForeignKey, fielda, fieldb...)
SELECT Table2PK as OldTable2PK,
(SELECT PK FROM MainTableTarget) as MainTableForeignKey, --This get the FK to point at the newly created database record
fielda,
fieldb
FROM OldTable2
그것은 아마있을거야 고통을하지만 여기서 고통스럽지 않은 옵션이 있다고 생각하지 마십시오 ...
오, 미안 구문이 약간 벗어난다면 ... 저는 T-SQL 사용자이므로 MySQL 구문을 잘 모릅니다. 바라건대 당신은 생각을 얻는다.
우리가 지금까지 무엇을 얻었는지 정확히 알 수 있고 당신이하고 싶은 것을 더 잘 이해할 수 있도록 코드/데이터베이스 구조를 포함하십시오 – Tom
자동 증분을 기본 키로 사용하는 경우 비즈니스 평등의 가정 잘못된 것입니다. –
은 동일하게 유지하기 위해 기본 키를 필요로 하는가? –