MariaDB - Управление дубликатами
MariaDB, как обсуждалось в предыдущих уроках, в некоторых ситуациях позволяет дублировать записи и таблицы. Некоторые из этих дубликатов фактически не являются дубликатами из-за различных типов данных или объектов или в результате уникального срока службы или хранения объекта операции. Эти дубликаты также обычно не вызывают проблем.
В некоторых ситуациях дубликаты действительно вызывают проблемы, и они часто появляются из-за неявных действий или мягкой политики команды MariaDB. Есть способы контролировать эту проблему, находить дубликаты, удалять дубликаты и предотвращать создание дубликатов.
Стратегии и инструменты
Есть четыре основных способа управления дубликатами:
Найдите их с помощью 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'
Note - Если ключ не найден, оператор INSERT ... ON DUPLICATE KEY UPDATE выполняется как обычный оператор вставки.
Использование DISTINCT
Предложения DISTINCT удаляют дубликаты из результатов. Общий синтаксис предложения DISTINCT следующий:
SELECT DISTINCT fields
FROM table
[WHERE conditions];
Note - Результаты оператора с предложением DISTINCT -
При использовании одного выражения оно возвращает для него уникальные значения.
При использовании нескольких выражений он возвращает уникальные комбинации.
Он не игнорирует значения 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');
Также обратите внимание на логику дубликатов. Некоторым таблицам требуются дубликаты в зависимости от характера данных таблицы. Учесть эту потребность в своей стратегии управления дублирующимися записями.