기본 키 열과 텍스트 열만있는 테이블이 있습니다. 텍스트 열에 중복 값이있어서 그 값을 없애고 싶습니다. 나는 빨리 내가 조금 주위에 인터넷 검색 테이블에서 중복 제거
을 시도하고 무엇을 가지고
이이었다 대답이었다 내가 가 생각 발견
ALTER IGNORE TABLE tablename ADD UNIQUE INDEX index_name (column1);
그러나 실행하려고 후 쿼리가 끝나자 MySQL이 끝났습니다. "# 1062 - 키 'remove_duplicates'"에 대해 중복 항목 '& d'가 있습니다. 그래서 잠시 동안 그걸 들여다 보면서 나는 그것이 효과가 없다는 것을 발견했습니다.
그 후에 나는 tmp 테이블을 만들고 오래된 것을 제거하려고 시도했지만 그 중 하나를 얻지 못했습니다. 무엇
CREATE table `tmp` like `Tag`
alter table tmp add unique (text)
INSERT IGNORE INTO `tmp` SELECT * FROM `Tag`
RENAME TABLE `Tag` TO `deleteme`
RENAME TABLE `tmp` TO `Tag`
DROP TABLE `deleteme`;
내가
열 '텍스트'에 대한 중복 값이없는 테이블 원하는 : I이었다 구문 잘못 입수했습니다 수 있습니다. 이전 방법으로 오류가있는 사람이 있으면 알려주십시오. 다른 방법으로 수행해야한다고 생각되면 알려 주시기 바랍니다.
편집
나는 또한 (내가 아는 매우 중요, 예) 관계가 PK에 매달려있는 것을 언급하는 것을 잊었다. 다른 테이블과의 관계를 "보존"하는 방법이 있습니까? 필요한 경우 다른 테이블의 ID를 수동으로 변경할 수 있지만이를 변경하는 방법은 훌륭합니다. 당신이 테이블에 삽입 할 때
복제 된 텍스트 값의 경우 보존 할 PK 값을 신경 써야합니까? –
이름에 고유 색인을 추가하는 솔루션은 정확하지만이 오류의 원인이되는 [InnoDB 버전의 MySql에 알려진 버그] (http://bugs.mysql.com/bug.php?id=40344)가 있습니다 메시지. 문제 및 해결 방법은이 답변에 나와 있습니다. (http://stackoverflow.com/a/8053812/1048425) – GarethD
"다른"문제점을 반영하여 제 질문을 업데이트했습니다. – Bono