Учебники

MariaDB — Управление дубликатами

MariaDB, как обсуждалось в предыдущих уроках, позволяет дублировать записи и таблицы в некоторых ситуациях. Некоторые из этих дубликатов фактически не являются дубликатами из-за различных типов данных или объектов или в результате уникальной продолжительности жизни или хранения рабочего объекта. Эти дубликаты также обычно не создают проблем.

В некоторых ситуациях дубликаты вызывают проблемы, и они часто появляются из-за неявных действий или мягкой политики команды MariaDB. Существуют способы решения этой проблемы, поиска дубликатов, удаления дубликатов и предотвращения создания дубликатов.

Стратегии и инструменты

Существует четыре основных способа управления дубликатами:

  • Ловите их с помощью JOIN и удаляйте их с помощью временной таблицы.

  • Используйте INSERT … ON DUPLICATE KEY UPDATE для обновления при обнаружении дубликата.

  • Используйте DISTINCT, чтобы сократить результаты оператора SELECT и удалить дубликаты.

  • Используйте INSERT IGNORE, чтобы остановить вставку дубликатов.

Ловите их с помощью JOIN и удаляйте их с помощью временной таблицы.

Используйте INSERT … ON DUPLICATE KEY UPDATE для обновления при обнаружении дубликата.

Используйте DISTINCT, чтобы сократить результаты оператора SELECT и удалить дубликаты.

Используйте INSERT IGNORE, чтобы остановить вставку дубликатов.

Использование соединения с временной таблицей

Просто выполните полусоединение как внутреннее соединение, а затем удалите найденные дубликаты с временной таблицей.

Использование INSERT

Когда INSERT … ON DUPLICATE KEY UPDATE обнаруживает дубликат уникального или первичного ключа, он выполняет обновление. При обнаружении нескольких уникальных ключей обновляется только первый. Следовательно, не используйте его для таблиц с несколькими уникальными индексами.

Просмотрите следующий пример, который показывает, что происходит в таблице, содержащей индексированные значения при вставке в заполненное поле.

INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

Примечание. Если ключ не найден, оператор INSERT … ON DUPLICATE KEY UPDATE выполняется как обычный оператор вставки.

Использование DISTINCT

Предложения DISTINCT удаляют дубликаты из результатов. Общий синтаксис для предложения DISTINCT следующий:

SELECT DISTINCT fields
FROM table
[WHERE conditions];

Примечание . Результаты оператора с предложением DISTINCT.

  • При использовании одного выражения оно возвращает для него уникальные значения.

  • При использовании нескольких выражений он возвращает уникальные комбинации.

  • Он не игнорирует значения NULL; таким образом, результаты также содержат NULL как уникальные значения.

При использовании одного выражения оно возвращает для него уникальные значения.

При использовании нескольких выражений он возвращает уникальные комбинации.

Он не игнорирует значения NULL; таким образом, результаты также содержат NULL как уникальные значения.

Просмотрите следующую инструкцию, используя предложение DISTINCT для одного выражения:

SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';

Просмотрите следующий пример, используя несколько выражений —

SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30

Использование INSERT IGNORE

Оператор INSERT IGNORE предписывает MariaDB отменить вставку при обнаружении дублирующейся записи. Просмотрите пример его использования, приведенный ниже —

mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
   VALUES( 'Lex', 'Luther');

Также обратите внимание на логику дубликатов. Некоторые таблицы требуют дубликатов в зависимости от характера этих данных таблицы. Учитывайте эту потребность в вашей стратегии управления дублирующимися записями.