중복 값을 삭제하고 복합 기본 키를 적용하기 위한 MySQL의 Oracle ROWID 대안
Oracle의 ROWID는 테이블. 그러나 MySQL에는 ROWID와 정확히 일치하는 것이 없습니다.
제공된 쿼리의 경우:
delete from my_table where rowid not in (select max(rowid) from my_table group by field1,field2)
특정 열을 기반으로 중복 행을 삭제한 다음 기본 키를 적용하는 것을 목표로 하는 쿼리는 다음과 같습니다. MySQL에는 다양한 접근 방식이 있습니다.
임시 테이블 및 고유 식별자: 원하는 결과를 얻는 한 가지 방법은 다음과 같습니다. 임시 테이블을 활용하여. 고유한 행 식별자(예: some_row_uid)를 사용하여 임시 테이블을 만들고 여기에 원하는 데이터를 삽입합니다. 그런 다음 원래 테이블을 임시 테이블과 조인하여 중복 행을 식별하고 삭제합니다.
세션 변수: 또는 세션 변수를 사용하여 각 행에 대한 실행 개수를 효과적으로 생성할 수 있습니다. 의사 ROWID를 생성합니다. 그러나 이 접근 방식은 하위 쿼리에서 동일한 테이블을 조작할 때 제한 사항에 직면할 수 있습니다.
임시 테이블을 사용한 쿼리 예시(MySQL 8 구문):
CREATE TEMPORARY TABLE duplicates AS SELECT @rowid:=IF(@f1=field1 AND @f2=field2, @rowid+1, 0) as rowid, @f1:=field1 as field1, @f2:=field2 as field2, some_row_uid FROM my_table t, (SELECT @rowid:=NULL, @f1:=NULL, @f2:=NULL) as init ORDER BY field1, field2 DESC; DELETE my_table FROM my_table INNER JOIN duplicates ON my_table.some_row_uid = duplicates.some_row_uid WHERE duplicates.rowid > 0; ALTER TABLE my_table ADD PRIMARY KEY (field1, field2);
이 접근 방식은 다음과 같습니다. 임시 테이블 생성 및 조작으로 인해 약간의 오버헤드가 발생합니다. 일회성 운영을 위해서는 합리적인 솔루션을 제공해야 합니다.
위 내용은 ROWID 없이 MySQL에서 중복 행을 삭제하고 복합 기본 키를 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!