Latest web development tutorials

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 оператор не будет выполнен успешно, и бросить неправильно.

ВСТАВИТЬ 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 в ту же запись, если первичный или уникальный присутствие, первый удаляется. Затем вставить новую запись.

Еще один набор данных является единственным способом, чтобы добавить уникальный индекс, следующим образом:

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.

Фильтр дубликатов данных

Если вам необходимо прочитать уникальные данные могут использовать 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;

Конечно, вы можете добавить индекс (индекс) и PRIMAY KEY (первичный ключ) Этот простой метод в таблице данных для удаления повторяющихся записей в таблице. Вот как:

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