>데이터 베이스 >MySQL 튜토리얼 >ROWID 없이 MySQL에서 중복 행을 삭제하고 복합 기본 키를 추가하는 방법은 무엇입니까?

ROWID 없이 MySQL에서 중복 행을 삭제하고 복합 기본 키를 추가하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-07 06:35:12896검색

How to Delete Duplicate Rows and Add a Composite Primary Key in MySQL Without ROWID?

중복 값을 삭제하고 복합 기본 키를 적용하기 위한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.