2012-03-26 6 views
-4

테이블에 데이터를 삽입하기 전에 중복 레코드와 해당 레코드의 목록을 확인해야합니다. 적어도 하나의 중복이있는 동안 쿼리는 아무 것도 삽입하지 않아야합니다. 기록의여러 중복 레코드 확인

번호 삽입 : ~ 1000 개

행을 테이블에 ~ 1.000.000

테이블 :

CREATE TABLE `test` (
    `A` varchar(19) NOT NULL, 
    `B` varchar(9) NOT NULL, 
    KEY `A` (`A`), 
    KEY `B` (`B`) 
) ENGINE=InnoDB; 

내가 두 열을 확인해야합니다

무엇 이렇게하는 효율적인 방법입니다.

미리 감사드립니다.

P. PHP와 MySQL을 사용하는 것을 고려

+0

사실 아무것도으로 삽입, 모든 중복의 목록을 획득하는 데. 유일하게 염두에 두어야 할 점은 모든 단일 레코드를 중복으로 검사하는 것입니다. 그러나 그것은 효율적으로 보이지 않습니다. 무엇을 하시겠습니까? – Turgut

+0

중복 키를 거부하기 위해 고유 키를 사용할 수 없습니까? – gapple

+0

@Turgut : 우리가 당신은 가서 * * ​​뭔가를 시도해야합니다 :) 질문을하기 전에 아무것도 시도하지 사람을 좋아하지 않습니다. 어쩌면 당신은 더 좋은 질문을 할 수 있습니다. 어쩌면 당신은 전혀 문제가없는 것입니다. –

답변

1

중복은 사용자 이름이 이미 있음을 의미합니다. 그래서 당신은 시도 할 수 있습니다 :

1] 그룹에 루프에 대한 당신의 삽입 목록의 모든 사용자 이름을 사용 의사 코드는 다음과 같습니다

$names=""; 
    for(each element){ 
     $names.=$val.", "; 
    //remove last comma "," 

모든 중복 항목을 얻기 위해 다음과 같은 SQL 문을 사용합니다.

select * from myTable where username in ($names); 

insert into myTable (username, address, otherstuff) 
values("henry", "35 skid", "who knows") 
ON DUPLICATE KEY UPDATE 
otherstuff = values(otherstuff); 
0

가 출력 그들에게 위해 다음, 어쨌든 select duplicates 모든 것을 삽입 할 수 있습니다 일을 한 가지 방법; 그리고 전체 작업을 롤백하는 것이 발견되면. 그것은 꽤 비싸지 만.