2012-07-15 1 views
13

MySQL에서 중복 키의 레코드를 제거하는 방법이 있습니까?중복 키에 MySQL 삽입; 지우다?

데이터베이스에 특정 기본 키가있는 레코드가 있고 동일한 키를 사용하여 다른 레코드를 추가하려고합니다. ON DUPLICATE KEY UPDATE은 레코드를 간단히 업데이트하지만 레코드가 이미 있으면 제거 할 수 있습니까? 그것은 버튼을 클릭 할 때 간단한 in/out 기능입니다.

+3

** 트리거 ** – rekenerd

+0

사용 감사합니다. 유일한 옵션이라고 생각합니다. –

답변

1

가장 가까운 가능한 해결책은 REPLACE입니다. 다음은 documentation for REPLACE입니다.

비슷한 질문 MySQL Forums에 질문을 받았다와 recommended(and only) answerREPLACE를 사용하는 것이 었습니다.

+0

네,하지만 그건 내가 찾고있는 것이 아닙니다. 데이터베이스의 항목을 바꾸고 싶지 않습니다. 존재한다면, 함께 제거하고 싶습니다. –

+0

그 경우 유일한 대안은 위의 유일한 해결책 일 것입니다.이 경우 별도의 명령문을 실행하는 것입니다. 먼저 레코드를 찾았는지 확인한 다음 결과를 추가하거나 제거하십시오. –

+0

또는'BOOLEAN' 또는'ENUM' 열을 만들고 원하는지 여부에 따라 0 또는 1로 설정하십시오. – hjpotter92

4

사용 REPLACE INTO :

replace into some_table 
select somecolumn from othertable 

새로운 데이터를 삽입하거나 것 중 하나 THR 같은 데이터는 데이터를 삭제하고 문제에 대한 MySQL의에서 솔루션이 물론 새로운

+1

vs ON DUPLICATE UPDATE에 대한 대체 성능이 다릅니다. REPLACE INTO가 레코드를 업데이트하지 않습니다. 레코드를 삭제하고 다시 추가합니다. 데이터와 인덱스가 많은 경우에는 잠시 시간이 걸릴 수 있습니다. 중복 업데이트를 사용하는 것이 더 좋지만 ON과 비슷한 항목을 삭제하려고합니다. DUPLICATE DELETE –

-2

예를 삽입합니다 존재하는 경우 .

삭제하거나 이미 중복 레코드가 테이블의 키 컬럼에 존재하는 경우 새로운 삽입 기록을 생략 할 경우,이 같은 무시 사용할 수 있습니다

다음
insert ignore into mytbl(id,name) values(6,'ron'),(7,'son'); 

id 열은 기본 키 테이블 mytbl. 이렇게하면 새 중복 레코드를 삭제하거나 건너 뜀으로써 여러 값을 테이블에 삽입합니다.

희망 사항은 귀하의 요구 사항을 충족시킬 것입니다.

+1

ignore를 삽입해도 아무 것도 삭제되지 않습니다 –

5

는 그것은 해결 방법이지만, 그것을 작동 :

는 작은-INT 만들기, 새 열을 만들고 do_delete을 호출, 또는 무엇 이건. 그런 다음 수행하십시오 On Duplicate Key Update do_delete = 1;

MySQL 버전/연결에 따라 동일한 명령문에서 여러 개의 쿼리를 실행할 수 있습니다. 그러나 그렇지 않은 경우에는 바로 뒤에 별도의 쿼리를 실행하십시오. 어느 쪽이든 다음 쿼리는 단지 Delete From [table] Where do_delete = 1;입니다. 이렇게하면 새 항목 인 경우 아무 것도 삭제하지 않습니다. 새 항목이 아니면 삭제할 항목을 표시 한 다음 삭제할 수 있습니다.

+0

이 옵션이 마음에 들며 업데이트 성명을 변경할 필요가 없습니다. – ChiMo