2014-11-05 7 views
0

큰 '즐겨 찾기'테이블이 있는데 user, favorite_type 및 고유 한 제약 조건이 없다는 사실이 밝혀졌습니다. favorite_id. 이 3에 인덱스를 추가하는 마이그레이션을 수행했지만 동일한 항목 집합을 가진 기존 데이터가 있기 때문에 작동하지 않습니다. 이 잃을 괜찮 너무 거기에 다른 데이터 (updated_at, created_at, id는) 그러나 그것은 불완전한 일치한다.여러 개의 열에서 동일한 값을 공유하는 큰 테이블의 중복 항목

이 작업을 수행하는 레일 방법 (3.2.x), 또는 (my) SQL의 방법이 있나요?

모든 항목을 가져 와서 그룹화하고 추가 요소를 모두 삭제할 수 있다는 것을 알고 있지만 매우 큰 테이블 (1mil +)이며 장기간 마이그레이션을 수행 할 수 없습니다. 새 테이블에 테이블 구조는, 고유의 제약 조건을 추가

답변

2

복사, 모든 레코드를 삽입합니다. 제약 조건으로 인해 복제가 실패합니다.

CREATE TABLE tableTmp LIKE table; 

제약 조건을 추가 한 다음 모든 레코드를 임시 테이블에 삽입하십시오.

INSERT INTO tableTmp SELECT * FROM table 

항목을 삭제 한 다음 이름을 변경하십시오.

DROP TABLE table; 
RENAME TABLE tableTmp TO table; 
+0

Hmhm, 그 작동합니다. 나는 하루에 체크 표시를 할 것이고, 누군가 내가 영리한 레일 트릭을 가지고 있는지보기를 원한다. 나는 생각하지 않는다. 그러나 너의 길은 최선이 될 것 같은 느낌이 든다. –

관련 문제