>데이터 베이스 >MySQL 튜토리얼 >[mysql 튜토리얼] MySQL은 중복 데이터를 처리합니다.

[mysql 튜토리얼] MySQL은 중복 데이터를 처리합니다.

黄舟
黄舟원래의
2016-12-26 17:26:441298검색

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

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

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

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

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 데이터를 삽입할 때 설정에서 레코드의 고유성을 확인한 후 중복된 데이터가 삽입되면 오류가 반환되지 않고 경고만 반환됩니다. 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);

위 내용은 [mysql 튜토리얼] MySQL이 중복 데이터를 처리하는 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요. !


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