MySQL 최신 매뉴얼 튜토...login
MySQL 최신 매뉴얼 튜토리얼
작가:php.cn  업데이트 시간:2022-04-15 14:04:12

MySQL은 중복 데이터를 처리합니다.


MySQL은 중복 데이터를 처리합니다

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

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

테이블에 중복된 데이터가 표시되는 것을 방지

MySQL 데이터 테이블의 지정된 필드를 PRIMARY KEY(기본 키) 또는 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 데이터를 삽입할 때 set 레코드의 고유성을 확인한 후 중복된 데이터가 삽입되면 오류가 반환되지 않고 경고만 반환됩니다. REPLACE 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
    -> ORDER BY last_name;
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);
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);

추천 관련 동영상 튜토리얼: