2011-09-27 3 views
1

하나의 MySQL 테이블에서 다른 테이블로 데이터를 가져와야합니다. 이전 테이블에는 다른 구식 구조가 있습니다 (이는별로 관련이 없습니다). 즉, 이전 레코드의 중복 가져 오기를 방지하기 위해 이전 테이블의 원래 ID를 저장하는 "imported_id"라는 새 테이블에 필드를 추가합니다.키가 아닌 열을 기반으로 중복 행 삽입을 완화하려면 어떻게합니까?

지금 제 질문은 실제로 중복을 어떻게 방지합니까? 새 시스템이 구형 시스템과 병렬로 실행되기 때문에 가져 오기는 불행하게도 두 번 이상 실행해야합니다. "import_id"필드 PK/UNIQUE는 이전 테이블에서 오지 않은 필드에 대해 null 값을 가지므로 새 필드를 추가 할 때 오류가 발생하므로이 필드를 만들 수 없습니다. 기본적으로 제약 조건이없는 임의의 열에 대해 즉석에서 INSERT IGNORE 유형을 사용하는 방법이 있습니까?

이 문제에 대해 더 많이 생각하면할수록 초기 SELECT에서 처리해야한다고 생각합니다. 그러나, 나는 이것을 일반적으로 다루는 품질 메커니즘에 관심이있다.

최고.

답변

2

import_id 열에 고유 키를 만들고 해당 열을 여전히 null로 지정할 수 있어야합니다. NOT NULL로 지정해야하는 것은 기본 키 C 럼입니다.

기본 작업 예제, 새 테이블에 당신이 널 (NULL) IMPORT_ID 열에 고유 키를 지정하고 여기에 ON DUPLICATE KEY

를 사용하여 새 테이블로 이전 테이블에서 삽입 할 때 다음 중복 키 오류를 처리 할 수 ​​있다고 그 내가 운전하고있는 무슨의 :

create table your_table 
(id int unsigned primary key auto_increment, 
someColumn varchar(50) not null, 
import_id int null, 
UNIQUE KEY `importIdUidx1` (import_id) 
); 



insert into your_table (someColumn,import_id) values ('someValue1',1) on duplicate key update someColumn = 'someValue1'; 
insert into your_table (someColumn) values ('someValue2'); 
insert into your_table (someColumn) values ('someValue3');; 
insert into your_table (someColumn,import_id) values ('someValue4',1) on duplicate key update someColumn = 'someValue4'; 

경우 첫 번째와 마지막 삽입은 이전 테이블에서 삽입을 대표하고 2 층과 3은 다른 곳에서 삽입을 나타냅니다.

희망이 도움과 행운을 빕니다!

+0

이유가 무엇이든, 나는 당신이 NULL 고유 필드를 가질 수 없다는 인상하에있었습니다. 게시물 주셔서 감사합니다. –

관련 문제