Latest web development tutorials

MySQL은 중복 된 데이터를 처리

거기에서 우리는 중복 데이터를 허용 어떤 경우에는 일부 MySQL의 데이터 테이블 중복 레코드, 수, 그러나 때때로 우리는 중복 데이터를 삭제해야 할 수 있습니다.

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


테이블이 나타납니다에서 중복 데이터를 방지

당신은 데이터의 고유성을 보장하기 위해 기본 키 (기본 키) 또는 UNIQUE (고유) 인덱스에 대한 MySQL의 데이터 테이블의 특정 필드를 설정할 수 있습니다.

테이블에서 인덱스와 기본 키없이 테이블이 여러 중복 레코드를 표시 할 수 있도록 : 예제를 해보자.

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

이 필드 FIRST_NAME 테이블을 설정하려면, LAST_NAME 데이터는 이중 기본 키를 설정 한 경우, 데이터의 고유 한 특성을 설정하는 듀얼 기본 키 모드를 설정 할 수 있습니다 반복 될 수없는, 그 키의 기본값은 NULL이 될 수 없습니다, NULL NOT에 설정할 수 있습니다. 다음과 같습니다 :

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 INTO IGNORE 차이는 INSERT INSERT INTO는 IGNORE으로, 데이터베이스의 데이터를 가지지 않는 경우, 이미 데이터베이스에 존재하는 데이터를 무시하는 데이터가있는 경우, 새로운 데이터를 삽입 한 후,이 데이터를 이동한다는 것이다. 사용자가 데이터를 유지할 수 있도록 이미 간극에 삽입 된 데이터의 목적을 달성하기 위해, 데이터베이스에 존재한다.

다음 예는 INSERT가 구현 후 잘못 갈 수 없어, 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는 단지 경고로 반환, 오류를 반환하지 않습니다, INTO를 무시합니다. 다음은 기본 또는 고유 한 존재는, 첫 번째 삭제 한 경우 동일한 레코드에 INTO를 교체합니다. 그런 다음 새 레코드를 삽입합니다.

데이터의 또 다른 세트는 유일한 방법은 다음과 같이 고유 인덱스를 추가하는 것입니다 :

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 절에 나와있는 열.
  • 절 갖는 반복 횟수가 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 키 (기본 키) 테이블에서 중복 레코드를 삭제하는 데이터 테이블이 간단한 방법을 추가 할 수 있습니다. 방법은 다음과 같습니다

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