MySQL 쿼리는 중복 데이터를 어떻게 처리합니까?중복 데이터 문을 제거하는 필터

MySQL의쿼리는 중복 데이터를 어떻게 처리합니까?중복 데이터 문을 제거하는 필터

MySQL의 중복 데이터 처리

일부 MySQL 데이터 테이블에는 중복 레코드가 있을 수 있습니다.어떤 경우에는 중복 데이터의 존재를 허용하지만 때로는 이러한 중복 데이터를 삭제해야 할 수도 있습니다.

이 장에서는 데이터 테이블의 중복 데이터를 방지하는 방법과 데이터 테이블의 중복 데이터를 삭제하는 방법을 소개합니다.


테이블의 중복 데이터 방지

MySQL 데이터 테이블의 지정된 필드를 다음과 같이 설정할 수 있습니다. 기본 키 또는 UNIQUE(고유) 데이터의 고유성을 보장하기 위한 인덱스입니다.

예를 들어 보겠습니다. 아래 테이블에는 인덱스와 기본 키가 없으므로 테이블에서 여러 중복 레코드를 허용합니다.

CREATE TABLE person_tbl
(
    first_name CHAR(20),
    last_name CHAR(20),
    sex CHAR(10)
);

테이블에서 first_name과 last_name 필드를 설정하고자 하는 경우 데이터가 반복될 수 없으며, 데이터의 고유성을 설정하는 이중 기본 키 모드를 설정할 수 있습니다. 이중 기본 키를 설정하면 해당 키의 기본값이 기본값입니다. NULL일 수 없지만 NOT NULL로 설정할 수 있습니다.다음과 같이:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);

고유 인덱스를 설정하면 중복 데이터를 삽입할 때 SQL 문이 성공적으로 실행되지 않고 오류가 발생합니다.

INSERT IGNORE INTO와 INSERT INTO의 차이점은 INSERT IGNORE는 데이터베이스에 이미 존재하는 데이터를 무시한다는 것입니다.데이터베이스에 데이터가 없으면 새 데이터를 삽입하고 데이터가 있으면 이 데이터를 건너뜁니다.이러한 방식으로 데이터베이스에 있는 기존 데이터를 보존할 수 있으며, 그 공백에 데이터를 삽입하는 목적을 달성할 수 있습니다.

다음 예에서는 오류 없이 데이터 테이블에 중복 데이터를 삽입하지 않고 실행되는 INSERT IGNORE INTO를 사용합니다.

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

INSERT IGNORE INTO 데이터를 삽입할 때 레코드의 고유성을 설정한 후 중복 데이터를 삽입하면 오류가 반환되지 않고 경고만 반환됩니다.그리고 REPLACE INTO into 기본 또는 고유 레코드가 있으면 먼저 삭제됩니다.새 레코드를 삽입합니다.

데이터의 고유성을 설정하는 또 다른 방법은 다음과 같이 UNIQUE 인덱스를 추가하는 것입니다.

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

통계 중복 데이터

아래에서 테이블에 있는 first_name 및 last_name의 중복 레코드 수를 계산합니다.

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;

위의 쿼리 문은 person_tbl 테이블의 중복 레코드 수를 반환합니다.일반적으로 중복 값을 쿼리하려면 다음을 수행합니다.

  • 가능한 중복 값이 ​​포함된 열을 확인합니다.
  • 열 선택 목록에서 COUNT(*)를 사용하여 해당 열을 나열합니다.
  • GROUP BY 절에 나열된 열입니다.
  • HAVING 절은 1보다 큰 반복 횟수를 설정합니다.

중복 데이터 필터링

고유한 데이터를 읽어야 하는 경우 SELECT 문에서 DISTINCT 키워드를 사용하여 중복 데이터를 필터링할 수 있습니다.

mysql> SELECT DISTINCT last_name, first_name
    -> FROM person_tbl;

GROUP BY를 사용하여 테이블에서 고유한 데이터를 읽을 수도 있습니다.

mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);

데이터 중복 제거

데이터 테이블에서 중복 데이터를 삭제하려면 다음 SQL 문을 사용할 수 있습니다.

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
    ->                  FROM person_tbl;
    ->                  GROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

물론 데이터 테이블에 INDEX(인덱스)와 PRIMAY KEY(기본 키)를 추가하여 테이블의 중복 레코드를 삭제할 수도 있습니다.아래와 같은 방법:

mysql> ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);

희망 첸 웨이량 블로그( https://www.chenweiliang.com/ ) 공유 "MySQL은 중복 데이터를 어떻게 쿼리하고 처리합니까?필터링 및 중복 제거 문'이 도움이 될 것입니다.

이 기사의 링크를 공유하는 것을 환영합니다:https://www.chenweiliang.com/cwl-499.html

최신 업데이트를 받으려면 Chen Weiliang 블로그의 Telegram 채널에 오신 것을 환영합니다!

🔔 채널 상위 디렉토리에서 귀중한 "ChatGPT 콘텐츠 마케팅 AI 도구 사용 가이드"를 가장 먼저 받아보세요! 🌟
📚 이 가이드에는 엄청난 가치가 담겨 있습니다. 🌟이것은 흔치 않은 기회입니다. 놓치지 마세요! ⏰⌛💨
당신이 원한다면 공유하고 좋아하십시오!
당신의 공유와 좋아요는 우리의 지속적인 동기 부여입니다!

 

发表 评论

귀하의 이메일 주소는 공개되지 않습니다. 必填 项 已 用 * 标注

맨위로 스크롤